Wat is wachten en melden in Java?



Wait and Notify in Java zijn de twee laatste methoden waarmee de threads met elkaar kunnen communiceren. Dit artikel helpt je met de details

functie in Java maakt gelijktijdige uitvoering van twee of meer delen van een programma mogelijk. Elk onderdeel is een draad. Deze draden moeten vaak hun acties coördineren. Dit wordt gedaan met behulp van een paar laatste methoden, zoals Wait en Notify in Java. Dit artikel zal u helpen deze methoden in detail te begrijpen.

Ik bespreek de onderwerpen in de volgende volgorde:





Laten we beginnen!

Wat is threadsynchronisatie?

Programma's met meerdere threads kunnen regelmatig een situatie opleveren waarin meerdere probeer dezelfde bron te vinden die frauduleuze en verrassende resultaten oplevert. Soms probeert meer dan één thread toegang te krijgen tot een gedeelde bron, u moet ervoor zorgen dat die bron slechts door één thread tegelijk wordt gebruikt. Dit kan gedaan worden met Synchronisatie in Java.



Nu over pollen. Polling is een proces waarbij een voorwaarde herhaaldelijk wordt getest totdat deze waar is. Deze methode wordt geïmplementeerd met behulp van om te controleren of een bepaalde voorwaarde waar is of niet. U kunt deze methode gebruiken voor threads, maar deze methode verspilt veel CPU-cycli en ook maakt het implementatieproces erg inefficiënt. Om dit soort bugs te voorkomen, worden methoden zoals Wait en Notify in Java geïntroduceerd.

Wat zijn de methoden Wait () en Notify ()?

Om het multithreading-probleem aan te pakken, kunnen methoden zoals Wait en Notify in worden gebruikt. De Object-klasse gebruikt deze drie laatste methoden waarmee threads kunnen communiceren over de vergrendelde status van een bron. Ze worden ook wel de bewaakte blokken genoemd.

genereer een willekeurige string java

Wacht()

Deze methode zorgt ervoor dat de thread wacht totdat een andere thread de methoden notification () en notificationAll () aanroept voor dit object. Deze Wait () methode vertelt de aanroepende thread om een ​​vergrendeling los te laten en in slaap te vallen totdat een andere thread dezelfde monitor binnenkomt en aanroept om te melden (). Deze methode heft de vergrendeling op voordat wordt gewacht en herovert de vergrendeling voordat deze terugkeert van de methode wait ().



Wait () -methode is nauw geïntegreerd met het synchronisatieslot. Dit wordt gedaan door een functie te gebruiken die niet rechtstreeks beschikbaar is vanuit het synchronisatiemechanisme.

Syntaxis:

gesynchroniseerd (lockObject) {while (! conditie) {lockObject.wait ()} // voer de actie hier uit}

De huidige thread moet de eigenaar zijn van de monitor van het object. Het moet alleen worden aangeroepen vanuit de gesynchroniseerde methode, anders genereert het een uitzondering.

Melden ()

Deze methode wordt gebruikt om het dat het moet functioneren. Het maakt een thread wakker die de wacht() methode op hetzelfde object.

Merk op dat bellen melden () geeft uiteindelijk geen slot op. Het vertelt een wachtende draad dat het kan ontwaken. Het slot wordt echter pas opgegeven als het gesynchroniseerde blok van de melder is voltooid. Zeg nu, als u belt melden () op een bron, maar de melder moet nog 10 seconden acties uitvoeren binnen zijn gesynchroniseerde blok, de thread die had gewacht, moet nog minstens 10 seconden wachten voordat de melder de vergrendeling op het object opheft, ook al heeft hij een melding () was gebeld.

Syntaxis:

gesynchroniseerd (lockObject) {// establishment_the_condition lockObject.notify () // eventuele aanvullende code indien nodig}

NotifyAll ()

Deze methode wordt gebruikt om alle threads te wekken die wait () op hetzelfde object hadden aangeroepen. De thread met de hoogste prioriteit wordt in de meeste situaties als eerste uitgevoerd, ook al is dit niet gegarandeerd. Andere dingen zijn hetzelfde als de methode Notice ().

Waarom en hoe Wait () en Notify () in Java te gebruiken?

U moet Wachten en melden gebruiken in omdat ze gerelateerd zijn aan slot en object heeft een slot. Hoewel wachten en informeren in Java een vrij fundamenteel concept is, worden ze gedefinieerd in het object klasse . Verrassend genoeg is het niet zo eenvoudig om de code te schrijven met behulp van wacht en bericht. U kunt dit testen door code te schrijven om het producer-consumentprobleem op te lossen met behulp van wait and notification. Producent consument voorbeeld-Wait and Notify in Java-EdurekaHier heb ik een gedeelde Wachtrij entwee dradengebeld Producent en Klant . Producent thread plaatst het nummer in een gedeelde wachtrij en Klant thread verbruikt de nummers uit de gedeelde bucket.

Voorwaarde is dat zodra een artikel is geproduceerd, de consumentendraad moet worden aangemeld en op dezelfde manier, nadat de consumptie-producentendraad moet worden aangemeld. Deze inter-threadcommunicatiewordt bereikt met behulp van wachten en melden in Java.

Opmerking : W.ait en nrtify-methoden worden gedefinieerd in de objectklasse, en ze moeten binnen een gesynchroniseerd blok worden aangeroepen.

Voorbeeld

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () gesynchroniseerd (b) {probeer {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} klasse Thread2 breidt Thread1 uit {int total @Override public void run () {gesynchroniseerd (dit) {voor (int i = 0 i<=100 i++) { total += i } notify() }}}

Merk op dat in het bovenstaande voorbeeld een object van Thread2, dat wil zeggen b, wordt gesynchroniseerd. Deze b voltooit de berekening voordat de hoofddraad zijn totale waarde uitvoert.

Uitgang:

Dit brengt ons bij het einde van dit artikel waar we het hebben geleerd on the Wait and Notify in Java.Ik hoop dat de bovengenoemde inhoud nuttig is gebleken bij het verbeteren van uw kennis. Blijf lezen, blijf ontdekken!

Bekijk ook eens door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De training- en certificeringcursus Java J2EE en SOA van Edureka is bedoeld voor studenten en professionals die Java-ontwikkelaar willen worden. De cursus is ontworpen om u een voorsprong te geven in het programmeren van Java en u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende zoals Hibernate & Spring.