logo

CountDownLatch v Javě

CountDownLatch se používá k zajištění toho, aby úloha před spuštěním čekala na další vlákna. Abychom porozuměli jeho aplikaci, uvažujme server, kde se hlavní úloha může spustit až po spuštění všech požadovaných služeb. Funkce CountDownLatch: Když vytváříme objekt CountDownLatch, zadáváme počet vláken, která by měla čekat na odpočítávání všech takových vláken, a to voláním CountDownLatch.countDown(), jakmile jsou dokončena nebo připravena k úloze. Jakmile počet dosáhne nuly, spustí se čekající úloha. Příklad CountDownLatch v 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();  }  } } 
výstup:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
Fakta o CountDownLatch:
  1. Vytvoření objektu CountDownLatch předáním int jeho konstruktoru (count) je ve skutečnosti počet pozvaných stran (vlákna) pro událost.
  2. Vlákno, které je při zahájení zpracování závislé na jiných vláknech, čeká, dokud každé druhé vlákno nezavolá odpočítávání. Všechna vlákna, která čekají na wait(), pokračují společně, jakmile odpočítávání dosáhne nuly.
  3. Metoda countDown() snižuje počet bloků metod count a wait() dokud count == 0