CountDownLatch wird verwendet, um sicherzustellen, dass eine Aufgabe auf andere Threads wartet, bevor sie gestartet wird. Um seine Anwendung zu verstehen, betrachten wir einen Server, bei dem die Hauptaufgabe erst gestartet werden kann, wenn alle erforderlichen Dienste gestartet sind. Funktionsweise von CountDownLatch: Wenn wir ein CountDownLatch-Objekt erstellen, geben wir die Anzahl der Threads an, auf die gewartet werden soll, bis alle Threads heruntergezählt werden, indem wir CountDownLatch.countDown() aufrufen, sobald sie abgeschlossen oder für den Job bereit sind. Sobald die Anzahl Null erreicht, beginnt die wartende Aufgabe mit der Ausführung. Beispiel für CountDownLatch in JAVA: Java // Java Program to demonstrate how // to use CountDownLatch Its used // when a thread needs to wait for other // threads before starting its work. import java.util.concurrent.CountDownLatch; public class CountDownLatchDemo { public static void main(String args[]) throws InterruptedException { // Let us create task that is going to // wait for four threads before it starts CountDownLatch latch = new CountDownLatch(4); // Let us create four worker // threads and start them. Worker first = new Worker(1000 latch 'WORKER-1'); Worker second = new Worker(2000 latch 'WORKER-2'); Worker third = new Worker(3000 latch 'WORKER-3'); Worker fourth = new Worker(4000 latch 'WORKER-4'); first.start(); second.start(); third.start(); fourth.start(); // The main task waits for four threads latch.await(); // Main thread has started System.out.println(Thread.currentThread().getName() + ' has finished'); } } // A class to represent threads for which // the main thread waits. class Worker extends Thread { private int delay; private CountDownLatch latch; public Worker(int delay CountDownLatch latch String name) { super(name); this.delay = delay; this.latch = latch; } @Override public void run() { try { Thread.sleep(delay); latch.countDown(); System.out.println(Thread.currentThread().getName() + ' finished'); } catch (InterruptedException e) { e.printStackTrace(); } } } Ausgabe: WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished
Fakten über CountDownLatch: - Das Erstellen eines CountDownLatch-Objekts durch Übergeben eines int an seinen Konstruktor (die Anzahl) ist tatsächlich die Anzahl der eingeladenen Parteien (Threads) für ein Ereignis.
- Der Thread, der von anderen Threads abhängig ist, um mit der Verarbeitung zu beginnen, wartet, bis jeder andere Thread den Countdown aufgerufen hat. Alle Threads, die auf „await()“ warten, werden gemeinsam fortgesetzt, sobald der Countdown Null erreicht.
- Die countDown()-Methode dekrementiert die Methodenblöcke count und waiting(), bis count == 0 ist