Der Zweck der Thread -Kommunikation besteht darin, Threads zu ermöglichen, Signale aneinander zu senden. Darüber hinaus kann die Thread -Kommunikation auch dazu führen, dass der Thread auf Signale aus anderen Threads wartet. Zum Beispiel kann Thread B auf Signale von Thread A warten, was ein Signal sein kann, dass Thread A verarbeitet und abgeschlossen ist.
Wait () Methode
- Unterbrechen Sie die Ausführung der Methode, lassen Sie diesen Thread warten, geben Sie vorübergehend das Recht auf, die CPU zu verwenden, und erlauben Sie anderen Threads, diese Synchronisationsmethode zu verwenden
Melden () methode
-Wachen Sie auf einem bestimmten Ende des wartenden Threads aufgrund der Verwendung dieser synchronen Partei auf
Notifyall () Methode
Wachen Sie alle Threads auf, die auf das Ende des Wartens aufgrund der Verwendung dieser Synchronisationsmethode warten
Wann wird die Wartenmethode verwendet
Wenn in der von einem Thread verwendeten Synchronisationsmethode eine Variable verwendet wird und diese Variable von anderen Threads geändert werden muss, um die Anforderungen dieses Threads zu erfüllen, können Sie die Wait () -Methode in der Synchronisationsmethode verwenden
Hier werde ich ein Beispiel in der Klasse als Beispiel nehmen, um kurz die Rolle des Wartens zu beschreiben und zu benachrichtigen
Wir wissen bereits, dass bei Multi-Threading, wie z. B. den Verkauf von Tickets, die in jedem Fenster verkaufte Tickets zufällig ist. Wenn wir 2 Ticketverkaufsfenster haben, wird festgestellt, dass 100 Tickets wiederum verkauft werden müssen. Nach dem Verkauf eines Tickets in Fenster A muss das nächste Ticket von Fenster B. verkauft werden. Wie implementieren wir diese Funktion?
Zunächst denke ich, dass, wenn eine Aussage festgelegt werden kann. Wenn (i%2 == 0) dann ist Thread 1 ausgeführt, ansonsten Thread 2 läuft, aber die Läufe von Thread 1 und Thread 2 sind zufällig und können nicht angegeben werden, um zu bestimmen, wer nach der Größe von i läuft.
Dann können wir Wait () und benachrichtigen () im Thread verwenden
Nachdem der Thread 1 beendet ist, warten Sie einen Moment, dann läuft Thread 2 und nachdem Thread 2 fertig ist, wecken Sie den Faden 1 und dann noch einmal
Nachdem der Thread 1 beendet ist, warten Sie einen Moment, dann wird Thread 2 ausgeführt, und nachdem Thread 2 fertig ist, wecken Sie den Faden 1 auf
Auf diese Weise können Thread 1 und Thread 2 nacheinander ausgeführt werden
Wir haben 10 Zahlen als Beispiele für das Schreiben eines Programms gedruckt und insgesamt 2 Klassen Myprint und MyPrintTest erstellt
Myprint.java
public class myprint implements runnable {private int i = 0; @Override public void run () {try {print ();} catch (InterruptedException e) {// Todo Auto-generiertes Catch-Block E.printstacktrace (); InterruptedException{while(i<10){System.out.println(Thread.currentThread().getName()+":"+i);i++;notify();try {wait();}catch (InterruptedException e) {e.printStackTrace();}}}}Die Ergebnisse sind in der Abbildung dargestellt
Sie können sehen, dass Thread 1 und Thread 2 implementiert wurden, um abwechselnd miteinander zu drucken.
Verstehe einfach den Laufprozess
while(i<10){System.out.println(Thread.currentThread().getName()+":"+i);i++;notify();try {wait();}catch (InterruptedException e) {e.printStackTrace();}}}}}Wenn ich <10 ist, drucken Sie Thread 1 und führen Sie dann Weck-up durch. Da kein Thread vor sich steht, wird dieser Schritt nicht ausgeführt. Dann wartet 1. Nach dem Ausführen von Thread 2 weckt das vorherige Thread, d. H. Thread 1, und druckt dann Thread 1.
Dieser Vorgang wird fortgesetzt, bis die Schleife ausbricht, sodass wir Rotationen durchführen können
Zusammenfassen
Das oben obene ist der gesamte Inhalt dieses Artikels über kurz die Rolle des Wartens und der Benachrichtigung in der Thread -Kommunikation. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!