logo

CountDownLatch Java nyelven

A CountDownLatch segítségével megbizonyosodhat arról, hogy egy feladat megvárja a többi szálat, mielőtt elindulna. Alkalmazásának megértéséhez vegyünk egy olyan szervert, ahol a fő feladat csak akkor indulhat el, ha az összes szükséges szolgáltatás elindult. A CountDownLatch működése: Amikor létrehozunk egy CountDownLatch objektumot, megadjuk azoknak a szálaknak a számát, amelyeknek meg kell várniuk az összes ilyen szálnak a visszaszámlálást a CountDownLatch.countDown() meghívásával, amint azok befejeződnek vagy készen állnak a feladatra. Amint a szám eléri a nullát, a várakozási feladat futni kezd. Példa a CountDownLatch-re JAVA-ban: 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();  }  } } 
Kimenet:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
Tények a CountDownLatch-ről:
  1. A CountDownLatch objektum létrehozása egy int átadásával a konstruktorának (a count) valójában egy esemény meghívott feleinek (szálak) számát jelenti.
  2. Az a szál, amely a feldolgozás megkezdéséhez más szálaktól függ, addig vár, amíg minden másik szál meg nem hívja a visszaszámlálást. Minden szál, amely az await()-re várakozik, együtt halad, ha a visszaszámlálás eléri a nullát.
  3. A countDown() metódus csökkenti a count és await() metódusblokkokat, amíg count == 0