你的位置:首页 > 软件开发 > Java > Java并发之CountDownLatch

Java并发之CountDownLatch

发布时间:2016-11-30 22:00:08
CountDownLatch是Java concurrent包下的一个同步工具。它可以让一个(或多个)线程等待,直到其他线程中的某些操作完成。本质上是一个信号量,我们把它比作一个有N个插销的大门,它把等待(调用await)的线程挡住了, 直到其他线程把插销去完了(调用countD ...

CountDownLatch是Java concurrent包下的一个同步工具。它可以让一个(或多个)线程等待,直到其他线程中的某些操作完成。

本质上是一个信号量,我们把它比作一个有N个插销的大门,它把等待(调用await)的线程挡住了, 直到其他线程把插销去完了(调用countDown减到0),这批线程才能执行。

下面是根据oracle官方文档改的一个例子:

/** * * Sample usage: Here is a pair of classes in which a group of worker threads use two countdown latches: The first is a start signal that prevents any worker from proceeding until the driver is ready for them to proceed; The second is a completion signal that allows the driver to wait until all workers have completed. */public class CountDownLatchDemo {  public static void main(String[] args) throws InterruptedException {    new Driver().run();  }}class Driver {  static final int N = 5;  public void run() throws InterruptedException {    CountDownLatch startSignal = new CountDownLatch(1);    CountDownLatch doneSignal = new CountDownLatch(N);    for (int i=0; i<N; i++) {      new Thread(new Worker(startSignal, doneSignal))          .start();    }    doSomething(); // don't let run yet    startSignal.countDown(); // let all threads proceed    doneSignal.await(); // wait for all to finish    doSomething();  }  private void doSomething() {    System.out.println("doSomething");  }}class Worker implements Runnable {  private CountDownLatch startSignal;  private CountDownLatch doneSignal;  public Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {    this.startSignal = startSignal;    this.doneSignal = doneSignal;  }  public void run() {    try {      startSignal.await();      doWork();      doneSignal.countDown();    } catch (InterruptedException e) {      e.printStackTrace();    }  }  private void doWork() {    System.out.println("worker work.");  }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Java并发之CountDownLatch

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。