CountDownLatch se usa para asegurarse de que una tarea espera otros subprocesos antes de comenzar. Para entender su aplicación, consideremos un servidor donde la tarea principal solo puede comenzar cuando todos los servicios requeridos han comenzado.
Funcionamiento de CountDownLatch:
cuando creamos un objeto de CountDownLatch, especificamos la cantidad de subprocesos que debe esperar, se requiere que todos esos subprocesos realicen una cuenta regresiva llamando a CountDownLatch.countDown() una vez que estén completos o listos para el trabajo. Tan pronto como el conteo llega a cero, la tarea de espera comienza a ejecutarse.
Ejemplo de CountDownLatch en 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(); } } }
Producción:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished
Datos sobre CountDownLatch:
- Crear un objeto de CountDownLatch pasando un int a su constructor (la cuenta), es en realidad el número de partes invitadas (subprocesos) para un evento.
- El subproceso, que depende de otros subprocesos para comenzar a procesar, espera hasta que todos los demás subprocesos hayan llamado a la cuenta regresiva. Todos los subprocesos que están esperando await() continúan juntos una vez que la cuenta atrás llega a cero.
- El método countDown() decrementa los bloques del método count y await() hasta count == 0
Este artículo es una contribución de Pratik Agarwal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA