Ce este Wait and Notify în Java?



Așteptați și Notificați în Java sunt cele două metode finale care permit firelor să comunice între ele. Acest articol vă va ajuta cu detalii

caracteristica în Java permite executarea simultană a două sau mai multe părți ale unui program. Fiecare parte este un fir. Aceste fire trebuie adesea să își coordoneze acțiunile. Acest lucru se face folosind câteva metode finale, cum ar fi Așteptați și Notificați în Java. Acest articol vă va ajuta să înțelegeți detaliat aceste metode.

Voi discuta subiectele în următoarea ordine:





Sa incepem!

Ce este sincronizarea firului?

Programele multi-thread pot veni în mod regulat cu o situație în care mai multe încercați să ajungeți la aceeași resursă care produce rezultate frauduloase și uimitoare. Uneori, mai multe fire pot încerca să acceseze o resursă partajată, trebuie să vă asigurați că resursa va fi utilizată de un singur fir la un moment dat. Acest lucru se poate face folosind Sincronizarea în Java.



Acum vorbim despre Polling. Interogarea este un proces de testare a unei stări în mod repetat, până când este adevărată. Această metodă este implementată cu ajutorul pentru a verifica dacă o anumită condiție este adevărată sau nu. Puteți utiliza această metodă pentru fire, dar această metodă irosește o mulțime de cicluri CPU și, de asemenea face procesul de implementare foarte ineficient. Pentru a evita aceste tipuri de bug-uri, sunt introduse metode precum Wait și Notify în Java.

Ce sunt metodele Wait () și Notify ()?

Pentru a rezolva problema multithreading, metode precum Wait și Notify in sunt folosite. Clasa Object utilizează aceste trei metode finale care permit firelor să comunice despre starea blocată a unei resurse. Ele sunt, de asemenea, denumite și blocuri păzite.

substring în exemplu server SQL

Aștepta()

Această metodă determină firul să aștepte până când un alt fir invocă metodele de notificare () și notificareAll () pentru acest obiect. Această metodă Wait () îi spune firului de apel să renunțe la o blocare și să meargă la culcare până când un alt thread intră în același monitor și apelează pentru a notifica (). Această metodă eliberează blocarea înainte de a aștepta și reaprinde blocarea înainte de a reveni din metoda wait ().



Metoda Wait () este strâns integrată cu blocarea sincronizării. Acest lucru se face utilizând o caracteristică care nu este disponibilă direct din mecanismul de sincronizare.

Sintaxă:

sincronizat (lockObject) {while (! condition) {lockObject.wait ()} // acționează aici}

Firul curent trebuie să dețină monitorul obiectului. Trebuie apelat numai din metoda sincronizată sau altfel va arunca o excepție.

Notificați ()

Această metodă este utilizată pentru a notifica că trebuie să funcționeze. Se trezește un fir care a numit aștepta() metoda pe același obiect.

Rețineți că apelarea notifica () în cele din urmă nu renunță la o încuietoare. Acesta spune unui fir de așteptare că se poate trezi. Cu toate acestea, blocarea nu se renunță efectiv până la finalizarea blocului sincronizat al notificatorului. Acum spune, dacă suni notifica () pe o resursă, dar notificatorul trebuie să efectueze acțiuni timp de 10 secunde în cadrul blocului său sincronizat, firul care aștepta va trebui să aștepte cel puțin încă 10 secunde suplimentare pentru ca notificatorul să elibereze blocarea obiectului, chiar dacă notifică () fusese chemat.

Sintaxă:

sincronizat (lockObject) {// stabili_condiția lockObject.notify () // orice cod suplimentar dacă este necesar}

NotifyAll ()

Această metodă este utilizată pentru a trezi toate firele care au numit wait () pe același obiect. Cel mai mare thread prioritar va rula mai întâi în majoritatea situației, chiar dacă nu este garantat. Alte lucruri sunt la fel ca metoda notification ().

De ce și cum se utilizează Wait () și Notify () în Java?

Ar trebui să utilizați Wait și Notify în deoarece sunt legate de blocare și obiectul are o blocare. Chiar dacă așteptați și notificați în Java sunt un concept destul de fundamental, acestea sunt definite în clasa obiectului . În mod surprinzător, nu este atât de ușor să scrieți codul folosind așteptați și notificați. Puteți testa acest lucru scriind cod pentru a rezolva problema producător-consumator folosind așteptați și notificați. Exemplu de consumator producător-Așteptați și notificați în Java-EdurekaAici, am un partajat Coadă șidouă firenumit Producător și Consumator . Producător thread pune numărul într-o coadă partajată și Consumator firul consumă numerele din bucket-ul partajat.

Condiția este ca odată ce un produs este produs, firul consumatorului trebuie să fie notificat și în mod similar, după ce firul producătorului de consum trebuie notificat. Acest inter-threadcomunicarese realizează folosind wait și notification în Java.

Notă : W.ait și nrmetodele de identificare sunt definite în clasa obiectși trebuie să fie apelate în interiorul blocului sincronizat.

Exemplu

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Se așteaptă 2 pentru a finaliza ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} class Thread2 extends Thread1 {int total @Override public void run () {sincronizat (acesta) {pentru (int i = 0 i<=100 i++) { total += i } notify() }}}

Observați că în exemplul de mai sus, un obiect al Thread2, adică b, este sincronizat. Acest b finalizează calculul înainte ca firul principal să-și scoată valoarea totală.

Ieșire:

Acest lucru ne aduce la sfârșitul acestui articol, unde am învățat pe Așteptați și notificați în Java.Sper că conținutul menționat mai sus s-a dovedit a fi util în îmbunătățirea dvs. cunoştinţe. Continuați să citiți, continuați să explorați!

De asemenea, verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început important în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse precum Hibernate & Spring.