Què és Wait and Notify a Java?



Espera i notifica a Java són els dos mètodes finals que permeten que els fils es comuniquin entre ells. Aquest article us ajudarà amb els detalls

La funció de Java permet l'execució simultània de dues o més parts d'un programa. Cada part és un fil. Aquests fils sovint han de coordinar les seves accions. Això es fa utilitzant alguns mètodes finals com ara Espera i Notifica a Java. Aquest article us ajudarà a entendre aquests mètodes en detall.

Discutiré els temes en el següent ordre:





Anem a començar!

Què és la sincronització de fils?

Els programes multi-thread poden presentar-se regularment en una situació en què diversos intentar arribar al mateix recurs que produeix resultats fraudulents i sorprenents. De vegades, és possible que més d'un fil pugui provar d'accedir a un recurs compartit; heu d'assegurar-vos que el recurs només serà utilitzat per un fil alhora. Això es pot fer mitjançant Sincronització a Java.



Ara parlem de Polling. El sondeig és un procés per provar una condició repetidament fins que sigui cert. Aquest mètode s'implementa amb l'ajuda de per comprovar si una condició particular és certa o no. Podeu utilitzar aquest mètode per a fils, però també malgasta molts cicles de CPU fa que el procés d'implementació sigui molt ineficient. Per evitar aquest tipus d’errors, s’introdueixen mètodes com Wait i Notify a Java.

Què són els mètodes Wait () i Notify ()?

Per solucionar el problema de la multi-threading, hi ha mètodes com ara Wait and Notify in s’utilitzen. La classe Object utilitza aquests tres mètodes finals que permeten als fils comunicar-se sobre l’estat de bloqueig d’un recurs. També s’anomenen els blocs vigilats.

t tipus de dades de data sql

Espera ()

Aquest mètode fa que el fil esperi fins que un altre fil invoca els mètodes notification () i notificationAll () per a aquest objecte. Aquest mètode Wait () indica al fil de trucades que deixi anar un pany i vagi a dormir fins que algun altre fil entri al mateix monitor i truqui a notificar (). Aquest mètode allibera el bloqueig abans d’esperar i torna a adquirir el bloqueig abans de tornar del mètode wait ().



El mètode Wait () està completament integrat amb el bloqueig de sincronització. Això es fa utilitzant una característica que no està disponible directament des del mecanisme de sincronització.

Sintaxi:

sincronitzat (lockObject) {while (! condition) {lockObject.wait ()} // fes l'acció aquí}

El fil actual ha de ser el monitor del seu objecte. S’ha de cridar només des del mètode sincronitzat o, en cas contrari, produirà una excepció.

Notifica ()

Aquest mètode s'utilitza per notificar a que ha de funcionar. Es desperta un fil que es diu wait () mètode sobre el mateix objecte.

Tingueu en compte que la trucada notificar () finalment no renuncia a un pany. Indica a un fil d’espera que pot despertar. Tanmateix, el bloqueig no es renuncia fins que el bloc sincronitzat del notificador s'hagi completat. Ara digueu, si truqueu notificar () en un recurs, però el notificador encara ha de dur a terme accions durant 10 segons dins del seu bloc sincronitzat, el fil que havia estat esperant haurà d'esperar almenys 10 segons addicionals perquè el notificador alliberi el bloqueig de l'objecte, tot i notificar () s’havia cridat.

Sintaxi:

sincronitzat (lockObject) {// establir_la_condició lockObject.notify () // qualsevol codi addicional si cal}

NotifyAll ()

Aquest mètode s'utilitza per despertar tots els fils que havien cridat wait () al mateix objecte. El fil de màxima prioritat s’executarà en la major part de la situació tot i que no estigui garantit. Altres coses són les mateixes que el mètode notification ().

Per què i com utilitzar Wait () i Notify () a Java?

Heu d’utilitzar Espera i notifica a perquè estan relacionats amb el pany i l’objecte té un pany. Tot i que esperar i notificar a Java són un concepte bastant fonamental, es defineixen a la carpeta classe d'objectes . Sorprenentment, no és tan fàcil escriure el codi amb espera i notificació. Podeu provar-ho escrivint codi per resoldre el problema productor-consumidor mitjançant espera i notificació. Exemple de consumidor productor: espereu i notifiqueu a Java-EdurekaAquí, tinc una informació compartida Cua idos filsva trucar Productor i Consumidor . Productor thread posa el número en una cua compartida i Consumidor el fil consumeix els números del dipòsit compartit.

La condició és que, un cop produït un article, s’hagi de notificar el fil consumidor i, de manera similar, després que el fil productor de consum sigui notificat. Aquest inter-filcomunicaciós'aconsegueix utilitzant espera i notificació a Java.

Nota : W.ait i No.Els mètodes tify es defineixen a la classe d'objectes, i s'han de cridar dins del bloc sincronitzat.

Exemple

public class Thread1 {public static void main (String [] args) {Th22 b = new Thread2 () b.start () sincronitzat (b) {try {System.out.println ('Esperant 2 per completar ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} class Thread2 extends Thread1 {int total @Override public void run () {sincronitzat (això) {per a (int i = 0 i<=100 i++) { total += i } notify() }}}

Fixeu-vos que a l'exemple anterior, un objecte de Thread2, és a dir, b, està sincronitzat. Aquesta b completa el càlcul abans que el fil principal emeti el seu valor total.

Sortida:

Això ens porta al final d’aquest article on hem après el a l’espera i notifica a Java.Espero que el contingut esmentat hagi estat útil per millorar el vostre coneixement. Segueix llegint, continua explorant!

Consulteu també per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per a estudiants i professionals que vulguin ser desenvolupador de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per conceptes bàsics com avançats de Java juntament amb diversos com Hibernate & Spring.