CountDownLatch est utilisé pour garantir qu'une tâche attend d'autres threads avant de démarrer. Pour comprendre son application, considérons un serveur où la tâche principale ne peut démarrer que lorsque tous les services requis ont démarré. Fonctionnement de CountDownLatch : Lorsque nous créons un objet de CountDownLatch, nous spécifions le nombre de threads qu'il doit attendre pendant que tous ces threads doivent effectuer un compte à rebours en appelant CountDownLatch.countDown() une fois qu'ils sont terminés ou prêts à travailler. Dès que le compte atteint zéro, la tâche en attente commence à s'exécuter. Exemple de CountDownLatch en 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(); } } } Sortir: WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished
Faits sur CountDownLatch : - Créer un objet de CountDownLatch en passant un int à son constructeur (le nombre) correspond en fait au nombre de personnes invitées (threads) pour un événement.
- Le thread qui dépend d'autres threads pour démarrer le traitement attend que tous les autres threads aient appelé le compte à rebours. Tous les threads qui attendent wait() continuent ensemble une fois que le compte à rebours atteint zéro.
- La méthode countDown() décrémente les blocs de la méthode count et wait() jusqu'à ce que count == 0