logo

CountDownLatch Javassa

CountDownLatchia käytetään varmistamaan, että tehtävä odottaa muita säikeitä ennen kuin se alkaa. Ymmärtääksemme sen sovelluksen, harkitkaamme palvelinta, jossa päätehtävä voi alkaa vasta, kun kaikki tarvittavat palvelut ovat alkaneet. CountDownLatchin toiminta: Kun luomme CountDownLatch-objektin, määritämme säikeiden määrän, jonka sen pitäisi odottaa, kunnes kaikki tällaiset säikeet on laskettava alaspäin kutsumalla CountDownLatch.countDown(), kun ne on suoritettu tai valmiit työhön. Heti kun määrä saavuttaa nollan, odotustehtävä alkaa toimia. Esimerkki CountDownLatchista JAVA:ssa: 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();  }  } } 
Lähtö:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
Faktaa CountDownLatchista:
  1. CountDownLatch-objektin luominen välittämällä int sen rakentajalle (määrä) on itse asiassa kutsuttujen osapuolten (säikeiden) lukumäärä tapahtumaan.
  2. Säie, jonka käsittely alkaa muista säikeistä, odottaa, kunnes jokainen toinen säie on kutsunut laskurin. Kaikki säikeet, jotka odottavat await():ta, etenevät yhdessä, kun laskuri saavuttaa nollan.
  3. countDown()-metodi vähentää count- ja await()-metodilohkoja, kunnes count == 0