logo

CountDownLatch i Java

CountDownLatch används för att se till att en uppgift väntar på andra trådar innan den startar. För att förstå dess tillämpning låt oss överväga en server där huvuduppgiften bara kan starta när alla nödvändiga tjänster har startat. Fungerar av CountDownLatch: När vi skapar ett objekt av CountDownLatch anger vi antalet trådar som det ska vänta på att alla sådana trådar ska räknas ner genom att anropa CountDownLatch.countDown() när de är klara eller redo för jobbet. Så snart räkningen når noll börjar den väntande uppgiften köras. Exempel på CountDownLatch i 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();  }  } } 
Produktion:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
Fakta om CountDownLatch:
  1. Att skapa ett objekt av CountDownLatch genom att skicka en int till dess konstruktor (antalet) är faktiskt antalet inbjudna parter (trådar) för en händelse.
  2. Tråden som är beroende av andra trådar för att börja bearbeta väntar på tills varannan tråd har ringt nedräkning. Alla trådar som väntar på await() fortsätter tillsammans när nedräkningen når noll.
  3. countDown()-metoden minskar antalet block och await()-metoden tills count == 0