Che cos'è Attendi e notifica in Java?



Wait e Notify in Java sono i due metodi finali che consentono ai thread di comunicare tra loro. Questo articolo ti aiuterà con i dettagli

caratteristica in Java consente l'esecuzione simultanea di due o più parti di un programma. Ogni parte è un filo. Questi fili spesso devono coordinare le loro azioni. Questo viene fatto utilizzando alcuni metodi finali come Wait e Notify in Java. Questo articolo ti aiuterà a capire questi metodi in dettaglio.

Discuterò gli argomenti nel seguente ordine:





Cominciamo!

Cos'è la sincronizzazione dei thread?

I programmi multi-thread possono presentare regolarmente una situazione in cui più file tentare di accedere alla stessa risorsa che produce risultati fraudolenti e sorprendenti. A volte, più di un thread potrebbe tentare di accedere a una risorsa condivisa, è necessario assicurarsi che la risorsa venga utilizzata da un solo thread alla volta. Questo può essere fatto usando Sincronizzazione in Java.



Ora parliamo di sondaggi. Il polling è un processo di verifica ripetuta di una condizione finché non è vera. Questo metodo è implementato con l'aiuto di per verificare se una particolare condizione è vera o meno. Puoi usare questo metodo per i thread ma questo metodo spreca molti cicli della CPU e anche rende il processo di implementazione molto inefficiente. Per evitare questo tipo di bug, vengono introdotti metodi come Wait e Notify in Java.

Cosa sono i metodi Wait () e Notify ()?

Per affrontare il problema del multithreading, metodi come Wait e Notify in sono usati. La classe Object utilizza questi tre metodi finali che consentono ai thread di comunicare sullo stato bloccato di una risorsa. Sono anche definiti come i blocchi sorvegliati.

come eseguire il test del database

Aspettare()

Questo metodo fa sì che il thread attenda fino a quando un altro thread invoca i metodi notify () e notifyAll () per questo oggetto. Questo metodo Wait () dice al thread chiamante di lasciare andare un blocco e andare a dormire finché un altro thread non entra nello stesso monitor e chiama a notify (). Questo metodo rilascia il blocco prima di attendere e riacquisisce il blocco prima di tornare dal metodo wait ().



Il metodo Wait () è strettamente integrato con il blocco della sincronizzazione. Questa operazione viene eseguita utilizzando una funzionalità non disponibile direttamente dal meccanismo di sincronizzazione.

Sintassi:

sincronizzato (lockObject) {while (! condition) {lockObject.wait ()} // esegui l'azione qui}

Il thread corrente deve possedere il monitor dell'oggetto. Deve essere chiamato solo dal metodo sincronizzato altrimenti genererà un'eccezione.

Notificare()

Questo metodo viene utilizzato per notificare a che deve funzionare. Riattiva un thread che ha chiamato il file aspettare() metodo sullo stesso oggetto.

Nota quella chiamata notificare() alla fine non molla una serratura. Dice a un thread in attesa che può svegliarsi. Tuttavia, il blocco non viene effettivamente abbandonato fino al completamento del blocco sincronizzato del notificatore. Ora dì, se chiami notificare() su una risorsa ma il notificatore deve ancora eseguire azioni per 10 secondi all'interno del suo blocco sincronizzato, il thread che era in attesa dovrà attendere almeno altri 10 secondi in più affinché il notificatore rilasci il blocco sull'oggetto, anche se notificato () era stato chiamato.

Sintassi:

sincronizzato (lockObject) {// stabilire_the_condition lockObject.notify () // qualsiasi codice aggiuntivo se necessario}

NotifyAll ()

Questo metodo viene utilizzato per riattivare tutti i thread che avevano chiamato wait () sullo stesso oggetto. Il thread con la priorità più alta verrà eseguito per la prima volta nella maggior parte delle situazioni anche se non è garantito. Altre cose sono le stesse del metodo notify ().

Perché e come utilizzare Wait () e Notify () in Java?

Dovresti usare Wait and Notify in perché sono legati al lucchetto e l'oggetto ha un lucchetto. Sebbene l'attesa e la notifica in Java siano un concetto fondamentale, sono definite nel file classe di oggetti . Sorprendentemente, non è così facile scrivere il codice utilizzando l'attesa e la notifica. Puoi verificarlo scrivendo codice per risolvere il problema produttore-consumatore utilizzando wait and notify. Esempio di produttore consumatore-Attendi e notifica in Java-EdurekaEcco, ho condiviso Coda edue filichiamato Produttore e Consumatore . Produttore thread inserisce il numero in una coda condivisa e Consumatore thread consuma i numeri dal bucket condiviso.

La condizione è che una volta che un articolo è stato prodotto, il thread del consumatore deve essere informato e, analogamente, dopo che il thread del produttore del consumo deve essere informato. Questo inter-threadcomunicazionesi ottiene utilizzando l'attesa e la notifica in Java.

Nota : W.ait e noI metodi tify sono definiti nella classe dell'oggettoe devono essere chiamati all'interno del blocco sincronizzato.

Esempio

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterrruptException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} class Thread2 extends Thread1 {int total @Override public void run () {synchronized (this) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Notare che nell'esempio precedente, un oggetto di Thread2, ovvero b, è sincronizzato. Questa b completa il calcolo prima che il thread principale restituisca il suo valore totale.

Produzione:

Questo ci porta alla fine di questo articolo in cui abbiamo appreso il in attesa e notifica in Java.Spero che il contenuto di cui sopra si sia rivelato utile per migliorare il tuo conoscenza. Continua a leggere, continua ad esplorare!

Controlla anche da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per studenti e professionisti che desiderano diventare sviluppatori Java. Il corso è progettato per darti un vantaggio nella programmazione Java e formarti per concetti Java sia di base che avanzati insieme a vari come Hibernate & Spring.