logo

CountDownLatch v jazyku Java

CountDownLatch sa používa na zabezpečenie toho, aby úloha pred spustením čakala na iné vlákna. Aby sme pochopili jeho aplikáciu, uvažujme o serveri, kde sa hlavná úloha môže spustiť až po spustení všetkých požadovaných služieb. Fungovanie CountDownLatch: Keď vytvoríme objekt CountDownLatch, určíme počet vlákien, ktoré by mali čakať, kým všetky takéto vlákna musia vykonať odpočítavanie, volaním CountDownLatch.countDown(), keď sú dokončené alebo pripravené na prácu. Hneď ako počet dosiahne nulu, spustí sa čakacia úloha. Prí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 
Fakty o CountDownLatch:
  1. Vytvorenie objektu CountDownLatch odovzdaním int jeho konštruktorovi (count) je vlastne počet pozvaných účastníkov (vlákna) pre udalosť.
  2. Vlákno, ktoré je pri spustení spracovania závislé od iných vlákien, čaká, kým každé druhé vlákno nezavolá odpočítavanie. Všetky vlákna, ktoré čakajú na wait(), pokračujú spoločne, keď odpočítavanie dosiahne nulu.
  3. Metóda countDown() znižuje počet blokov metód count a wait(), kým count == 0