Was ist Warten und Benachrichtigen in Java?



Warten und Benachrichtigen in Java sind die beiden letzten Methoden, mit denen die Threads miteinander kommunizieren können. Dieser Artikel hilft Ihnen mit den Details

Die Funktion in Java ermöglicht die gleichzeitige Ausführung von zwei oder mehr Teilen eines Programms. Jeder Teil ist ein Thread. Diese Threads müssen häufig ihre Aktionen koordinieren. Dies geschieht mit einigen abschließenden Methoden wie Warten und Benachrichtigen in Java. Dieser Artikel hilft Ihnen, diese Methoden im Detail zu verstehen.

Ich werde die Themen in der folgenden Reihenfolge diskutieren:





Lass uns anfangen!

Was ist Thread-Synchronisation?

Multithread-Programme können regelmäßig zu einer Situation führen, in der mehrere Programme vorhanden sind Versuchen Sie, auf dieselbe Ressource zuzugreifen, die zu betrügerischen und verblüffenden Ergebnissen führt. Manchmal versucht möglicherweise mehr als ein Thread, auf eine freigegebene Ressource zuzugreifen. Sie müssen sicherstellen, dass die Ressource jeweils nur von einem Thread verwendet wird. Dies kann mit erfolgen Synchronisation in Java.



Ich spreche jetzt von Polling. Beim Abrufen wird eine Bedingung wiederholt getestet, bis sie wahr ist. Diese Methode wird mit Hilfe von implementiert um zu überprüfen, ob eine bestimmte Bedingung erfüllt ist oder nicht. Sie können diese Methode für Threads verwenden, aber diese Methode verschwendet viele CPU-Zyklen und auch macht den Implementierungsprozess sehr ineffizient. Um diese Art von Fehlern zu vermeiden, werden Methoden wie Warten und Benachrichtigen in Java eingeführt.

Was sind die Methoden Wait () und Notify ()?

Um das Multithreading-Problem zu lösen, verwenden Sie Methoden wie Warten und Benachrichtigen in werden verwendet. Die Object-Klasse verwendet diese drei endgültigen Methoden, mit denen Threads über den gesperrten Status einer Ressource kommunizieren können. Sie werden auch als bewachte Blöcke bezeichnet.

So erstellen Sie eine Sitzung in Java

Warten()

Diese Methode bewirkt, dass der Thread wartet, bis ein anderer Thread die Methoden notify () und notifyAll () für dieses Objekt aufruft. Diese Wait () -Methode weist den aufrufenden Thread an, eine Sperre aufzuheben und in den Ruhezustand zu wechseln, bis ein anderer Thread denselben Monitor betritt und notify () aufruft. Diese Methode gibt die Sperre vor dem Warten frei und ruft die Sperre erneut auf, bevor sie von der wait () -Methode zurückkehrt.



Die Wait () -Methode ist eng in die Synchronisationssperre integriert. Dies erfolgt mithilfe einer Funktion, die nicht direkt über den Synchronisationsmechanismus verfügbar ist.

Syntax:

synchronisiert (lockObject) {while (! Bedingung) {lockObject.wait ()} // hier die Aktion ausführen}

Der aktuelle Thread muss den Monitor des Objekts besitzen. Es darf nur von der synchronisierten Methode aufgerufen werden, sonst wird eine Ausnahme ausgelöst.

Benachrichtigen()

Diese Methode wird verwendet, um die zu benachrichtigen dass es funktionieren muss. Es weckt einen Thread, der das aufgerufen hat warten() Methode für das gleiche Objekt.

Beachten Sie diesen Anruf benachrichtigen() gibt schließlich kein Schloss auf. Es teilt einem wartenden Thread mit, dass er aufwachen kann. Die Sperre wird jedoch erst dann aufgehoben, wenn der synchronisierte Block des Benachrichtigers abgeschlossen ist. Sagen Sie jetzt, wenn Sie anrufen benachrichtigen() Auf einer Ressource muss der Benachrichtiger jedoch innerhalb seines synchronisierten Blocks noch 10 Sekunden lang Aktionen ausführen. Der wartende Thread muss mindestens weitere 10 Sekunden warten, bis der Benachrichtiger die Sperre für das Objekt aufhebt, obwohl er benachrichtigt wird () wurde aufgerufen.

Syntax:

synchronisiert (lockObject) {// den Zustand festlegen lockObject.notify () // bei Bedarf zusätzlichen Code}

NotifyAll ()

Diese Methode wird verwendet, um alle Threads zu aktivieren, die wait () für dasselbe Objekt aufgerufen haben. Der Thread mit der höchsten Priorität wird in den meisten Fällen zuerst ausgeführt, obwohl dies nicht garantiert ist. Andere Dinge sind die gleichen wie die Methode notify ().

Warum und wie werden Wait () und Notify () in Java verwendet?

Sie sollten Warten und Benachrichtigen in verwenden weil sie sich auf Sperre beziehen und Objekt eine Sperre hat. Obwohl Warten und Benachrichtigen in Java ein ziemlich grundlegendes Konzept sind, werden sie in der Objektklasse . Überraschenderweise ist es nicht so einfach, den Code mit wait and notify zu schreiben. Sie können dies testen, indem Sie Code schreiben, um das Hersteller-Verbraucher-Problem mit wait and notify zu lösen. Hersteller Verbraucher Beispiel-Warten und Benachrichtigen in Java-EdurekaHier habe ich eine geteilte Warteschlange undzwei Fädennamens Hersteller und Verbraucher . Hersteller Thread stellt die Nummer in eine gemeinsam genutzte Warteschlange und Verbraucher Thread verbraucht die Zahlen aus dem gemeinsam genutzten Bucket.

Die Bedingung ist, dass, sobald ein Artikel hergestellt ist, der Verbraucherthread benachrichtigt werden muss und in ähnlicher Weise, nachdem der Verbrauchserzeugerthread benachrichtigt werden muss. Dieser Inter-ThreadKommunikationwird durch Warten und Benachrichtigen in Java erreicht.

Hinweis : W.ait und neintify-Methoden werden in der Objektklasse definiert, und sie müssen innerhalb des synchronisierten Blocks aufgerufen werden.

Beispiel

öffentliche Klasse Thread1 {public static void main (String [] args) {Thread2 b = neuer Thread2 () b.start () synchronisiert (b) {try {System.out.println ('Warten auf 2 bis zum Abschluss ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} Klasse Thread2 erweitert Thread1 {int total @Override public void run () {synchronisiert (dies) {für (int i = 0 i<=100 i++) { total += i } notify() }}}

Beachten Sie, dass im obigen Beispiel ein Objekt von Thread2, dh b, synchronisiert wird. Dies b schließt die Berechnung ab, bevor der Haupt-Thread seinen Gesamtwert ausgibt.

Ausgabe:

Dies bringt uns zum Ende dieses Artikels, wo wir das gelernt haben auf das Warten und Benachrichtigen in Java.Ich hoffe, der oben genannte Inhalt hat sich als hilfreich erwiesen, um Ihre Inhalte zu verbessern Wissen. Lesen Sie weiter, erkunden Sie weiter!

Auch auschecken von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Konzepte schulen wie Hibernate & Spring.