logo

CountDownLatch in Java

CountDownLatch viene utilizzato per assicurarsi che un'attività attenda altri thread prima di iniziare. Per comprenderne l'applicazione consideriamo un server in cui l'attività principale può iniziare solo quando tutti i servizi richiesti sono stati avviati. Funzionamento di CountDownLatch: Quando creiamo un oggetto CountDownLatch specifichiamo il numero di thread che dovrebbe attendere affinché tutti i thread di questo tipo siano tenuti a eseguire il conto alla rovescia chiamando CountDownLatch.countDown() una volta completati o pronti per il lavoro. Non appena il conteggio raggiunge lo zero, l'attività in attesa inizia a essere eseguita. Esempio di 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();  }  } } 
Produzione:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
Informazioni su CountDownLatch:
  1. La creazione di un oggetto CountDownLatch passando un int al suo costruttore (il conteggio) è in realtà il numero di parti invitate (thread) per un evento.
  2. Il thread che dipende da altri thread per avviare l'elaborazione attende finché ogni altro thread non ha chiamato il conto alla rovescia. Tutti i thread in attesa di wait() procedono insieme una volta che il conto alla rovescia raggiunge lo zero.
  3. Il metodo countDown() decrementa i blocchi del metodo count e wait() fino a count == 0