logo

CountDownLatch in Java

CountDownLatch wordt gebruikt om ervoor te zorgen dat een taak op andere threads wacht voordat deze wordt gestart. Laten we, om de toepassing ervan te begrijpen, een server overwegen waarop de hoofdtaak pas kan starten als alle vereiste services zijn gestart. Werking van CountDownLatch: Wanneer we een object van CountDownLatch maken, specificeren we het aantal threads dat moet wachten totdat al deze threads moeten aftellen door CountDownLatch.countDown() aan te roepen zodra ze zijn voltooid of gereed zijn voor de taak. Zodra de telling nul bereikt, begint de wachttaak te lopen. Voorbeeld van 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();  }  } } 
Uitgang:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
Feiten over CountDownLatch:
  1. Het maken van een object van CountDownLatch door een int door te geven aan de constructor ervan (de telling) is feitelijk het aantal uitgenodigde partijen (threads) voor een evenement.
  2. De thread die afhankelijk is van andere threads om te beginnen met verwerken, wacht totdat elke andere thread het aftellen heeft aangeroepen. Alle threads die wachten op await() gaan samen verder zodra het aftellen nul bereikt.
  3. De methode countDown() verlaagt de methodeblokken count en await() totdat count == 0