Wait () und Notify () sind direkt mit der Objektklasse verbunden, dh alle Objekte haben diese Methode. Es scheint, dass dies zunächst sehr unglaublich ist, aber es ist tatsächlich sehr natürlich, da diese Methoden das besetzte Schloss beim Blockieren freigeben müssen, und das Schloss ist in jedem Objekt verfügbar. Ursache Thread Blocking. Die Benachrichtigung () -Methode zum Aufrufen eines Objekts führt zu einem zufällig ausgewählten Blockierungsblock in einem Thread, der durch die Wait () -Methode des Objekts behindert wird (es kann jedoch ausgeführt werden, bis es gesperrt ist).
Zweitens kann das Warten () und die Benachrichtigung () an jeder Position aufgerufen werden, dieses Paar muss jedoch in der synchronen Methode oder dem Block aufgerufen werden. Auf die gleiche Weise muss das Schloss auf dem Objekt dieses Methodenpaares im aktuellen Thread gehören, damit die Sperre freigesetzt werden kann. Daher muss der Methodenaufruf in einer solchen synchronisierten Methode oder einem solchen Blocking platziert werden. Wenn diese Bedingung nicht erfüllt ist, obwohl das Programm noch kompiliert werden kann, wird IllegalMonitorStateException während der Laufzeit erscheinen.
Die oben genannten Merkmale der Wait ()- und Notify () -Methoden bestimmen, dass sie sie häufig mit der synchronisierten Methode oder dem Blockieren verwenden. Methode oder Block liefert eine Methode oder einen Block liefert eine Methode oder einen Block. Methoden, die alle synchronisiert werden). Ihre Kombination ermöglicht es uns, eine Reihe exquisiter inter -Communikationsalgorithmen (z. B. Signalmengenalgorithmen) im Betriebssystem zu realisieren und es mit der Lösung verschiedener komplexer Inter -Kommunikationsprobleme zu lösen.
Über die Methoden warten () und benachrichtigen () werden schließlich zwei Punkte erklären:
Erstens: Rufen Sie die Benachrichtigung () -Methode auf, die dazu führt, dass der Blockierfaden zufällig aus dem von der Wait () -Methode behinderten Thread ausgewählt wird, das das Objekt aufruft.
Zweitens: Zusätzlich zu Benachrichtigung () gibt es auch eine Methode, die auch eine ähnliche Rolle spielen kann. zum Objekt. Natürlich kann nur der Thread, der die Sperre erhält, in den ausführbaren Status eingeben.
Verwandte Warte- und Benachrichtigungs -Demo: Benachrichtigung:
/** * <pre> * Sub -Thread -Zyklus 10 Mal, dann der Hauptfadenzyklus 100 Mal und dann 10 Mal zum Sub -Thread -Zyklus zurückkehren, dann 100 Mal zum Hauptfadenzyklus zurückkehren, also 50 Mal * </ presle> * @author ketqi */ public class waitnotifyDemo {public static void main (String [] args) {Final Business Business = New Business (); {für (int i = 1; i <= 50; i ++) {businesss.sub (i);}}}). {Business.min (i); e.printstacktrace ();}} für (int j = 1; j <= 10; j ++) {System.out.println ("Sub -thread -Sequenz von" + J + ", Schleife von" + i); } IsMainThread = false; Int j = 1; }}Das obige ist der gesamte Inhalt dieses Artikels.