CountDownLatch en Java

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:

  1. 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.
  2. 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.
  3. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *