Die Codekopie lautet wie folgt:
Paket com.yao;
Import Java.util.Concurrent.Countdownlatch;
import Java.util.concurrent.executorService;
import Java.util.concurrent.executors;
/**
* Countdownlatch ist ein Zähler, der eine Anfangszahl hat.
* Der auf diesen Zähler wartete Faden muss warten, bis der Zähler auf Null zählt, bevor sie fortgesetzt werden.
*/
öffentliche Klasse CountdownlatchTest {
/**
* Der Thread, der die Komponente initialisiert
*/
öffentliche statische Klassenkomponentthread implementiert Runnable {
// Schalter
Countdownlatch -Latch;
// Komponenten -ID
int id;
// Methode konstruieren
public componentThread (Countdownlatch -Latch, int id) {
this.latch = latch;
this.id = id;
}
public void run () {
// die Komponente initialisieren
System.out.println ("Initialisierungskomponente" + ID);
versuchen {
Thread.sleep (500 * id);
} catch (InterruptedException e) {
}
System.out.println ("Komponente" + id + "initialisiert!");
// den Zähler um eins verringern
latch.countdown ();
}
}
/**
* Starten Sie den Server
*/
public static void startserver () löst Ausnahme {aus {
System.out.println ("Server startet");
// Initialisieren Sie einen Countdownlatch mit einem Anfangswert von 3
Countdownlatch Latch = new Countdownlatch (3);
// 3 Threads starten, um 3 Komponenten zu starten
ExecutorService Service = Executors.NewCachedThreadpool ();
service.submit (neuer KomponentThread (Latch, 1));
service.submit (neuer KomponentThread (Latch, 2));
service.submit (neuer KomponentThread (Latch, 3));
service.shutdown ();
// Warten auf die Initialisierung von 3 Komponenten abgeschlossen
latch.aait ();
// Wenn alle erforderlichen drei Komponenten abgeschlossen sind, kann der Server fortgesetzt werden
System.out.println ("Server ist auf!");
}
public static void main (String [] args) löst Ausnahme {aus {
CountdownLatchTest.StartServer ();
}
}