Es scheint, dass der Countdown -Zähler mit der Countdown -Methode des Countdownlatch -Objekts abzüglich des Zählers um 1. Wenn er 0 erreicht, beginnen alle Kellner mit der Ausführung.
java.util.concurrent.countdownlaatch
Eine synchrone Hilfsklasse, bevor ein Satz von Operationen in anderen Threads abgeschlossen wird, ermöglicht ein oder mehrere Threads. Verwenden Sie eine bestimmte Anzahl, um den Countdownlatch zu initialisieren. Da die Methode countdown () aufgerufen wird, wurde die wartende Methode blockiert, bevor die Stromzählung Null erreicht. Danach werden alle wartenden Themen veröffentlicht, und alle nachfolgenden Wartezeiten werden sofort zurückkehren. Dieses Phänomen erscheint erst einmal, wenn die Umsetzung nicht zurückgesetzt werden kann. Wenn Sie die Anzahl zurücksetzen müssen, sollten Sie die Verwendung von Cyclicbarrier in Betracht ziehen.
Countdownlatch ist ein allgemeines Synchronisierungs -Tool, das viele Verwendungszwecke hat. Verwenden Sie das Zählen 1 Initialisierte CountOwnLatch als einfache Öffnungs-/Sperrablagerung oder den Eingang: Bevor Sie den Eingang öffnen, indem Sie den COUNDDOWN () -Thread -Anruf anrufen, haben alle Threads, die an den Eingang angerufen werden, am Eingang gewartet. Verwenden Sie N -Initialen von CountdownLatch können warten, bis ein Thread wartet, bevor der N -Thread abgeschlossen ist, oder halten Sie ihn vor einer bestimmten Operation warten.
Eine der nützlichen Merkmale des Countdownlatch ist, dass der Thread, der die Countdown -Methode aufruft, nicht weiter aufgerufen werden soll, bis er bei Null gezählt wird. Bevor alle Threads durchlaufen werden können, verhindert, dass ein Thread nur eine Wartezeit fortsetzt.
Beispiel: Mehrere Athleten warten auf die Schiedsrichterauftrag: Alle Athleten wie den Schiedsrichter und andere Athleten veröffentlichen die Ergebnisse nach Qi Qi
Paket com.ljq.test.thread; .NewCachedThreadpool () // Der Schalter des Schiedsrichters hat einen Befehl ausgestellt, der Zähler ist 0, und der Athlet führt den endgültigen Countdownlatch -CDREDER = New Country (1). Der Schiedsrichter kündigte die Ergebnisse des Ergebniss an. Raun () {try {System.out.println ("Thread" + Thread.CurrentThread (). + Thread.CurrentThread (). +"Response Command Processing -Ergebnisse") ;;} catch (Ausnahme E) {E.PrintStackTrace ();}}; .Random ()*10000)); das Befehlssystem.out.println ("Thread" + Thread.CurrentThread (). GetName () + "hat den Befehl gesendet, auf das Ergebnis wartet") 0 Alle Athleten an Ort und Stelle.Rückenergebnisse:
Der Thread-Pool-Thread-3 bereitet sich darauf vor, den Befehlsthread-Pool-1-thread zu akzeptieren-IS bereitet sich darauf vor, den Befehls-Thread-Pool-Thread-2 zu akzeptieren, und bereitet sich darauf vor, die Befehls-Thread Main zu akzeptieren. Bald senden die Befehls-Thread-Main die gesendet die Der Befehl, das auf das Ergebnisergebnis wartet, wartet auf das Ergebnis-Ergebnis-Thread-Thread-2-Thread-2-Thread-1-Thread-3-Thread-3-Thread-1-Thread-Thread-Thread-Thread-1-Thread-1-Thread-1-Thread-Thread-Thread-Thread-1-Thread-1-Thread-1-Thread-1-Thread-Thread-3-Thread-3-Thread-1-Thread-1-Thread-3-Thread-2-Thread-Thread-3-Thread-Thread-Thread. Reaktion auf die Befehlsverarbeitungsergebnis Thread-1- Thread-2-Antwort auf Befehlsverarbeitungsergebnisse Threadpool-1-thread-1-Antwortbefehlsverarbeitungsergebnis Thread Main hat alle Antwortergebnisse empfangen