logo

CountDownLatch i Java

CountDownLatch bruges til at sikre, at en opgave venter på andre tråde, før den starter. For at forstå dens applikation, lad os overveje en server, hvor hovedopgaven først kan starte, når alle de nødvendige tjenester er startet. Arbejde med CountDownLatch: Når vi opretter et objekt af CountDownLatch, angiver vi antallet af tråde, det skal vente på, at alle sådanne tråde skal tælle ned ved at kalde CountDownLatch.countDown(), når de er afsluttet eller klar til jobbet. Så snart antallet når nul, begynder venteopgaven at køre. Eksempel 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. Oprettelse af et objekt af CountDownLatch ved at sende en int til dets konstruktør (optællingen) er faktisk antallet af inviterede parter (tråde) til en begivenhed.
  2. Tråden, som er afhængig af andre tråde for at begynde at behandle, venter på, indtil hver anden tråd har kaldt nedtælling. Alle tråde, som venter på await() fortsætter sammen, når nedtællingen når til nul.
  3. countDown()-metoden nedsætter antallet og await()-metodeblokkene, indtil count == 0