CountDownLatch的用法
2018-03-03 17:55
274 查看
CountDownLatch是一个同步的辅助类,它可以允许一个或多个线程等待,直到一组在其它线程中的操作执行完成。一个CountDownLatch会通过一个给定的count数来被初始化。其中await()方法会一直阻塞,直到当前的count被减到0,而这个过程是通过调用countDown()方法来实现的。在await()方法不再阻塞以后,所有等待的线程都会被释放,并且任何await()的子调用都会立刻返回。这是一次性的count不能被重置。如果你需要一种能重置count的版本,请考虑使用CyclicBarrier。
有1个driver和5个worker,需要满足以下两点要求:当driver完成了全部的工作之后才允许worker们开始工作;
当所有的worker都完成了自己的工作之后,driver主线程才能结束
示例
下面请看一个应用场景:有1个driver和5个worker,需要满足以下两点要求:当driver完成了全部的工作之后才允许worker们开始工作;
当所有的worker都完成了自己的工作之后,driver主线程才能结束
public class Driver { public static void main(String[] args) throws InterruptedException { CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = new CountDownLatch(5); // 依次创建并启动5个worker线程 for (int i = 0; i < 5; ++i) { new Thread(new Worker(startSignal, doneSignal)).start(); } System.out.println("Driver is doing something..."); System.out.println("Driver is Finished, start all workers ..."); startSignal.countDown(); // Driver执行完毕,发出开始信号,使所有的worker线程开始执行 doneSignal.await(); // 等待所有的worker线程执行结束 System.out.println("Finished."); } } class Worker implements Runnable{ private final CountDownLatch startSignal; private final CountDownLatch doneSignal; Worker(CountDownLatch startSignal, CountDownLatch doneSignal) { this.startSignal = startSignal; this.doneSignal = doneSignal; } public void run() { try { startSignal.await(); // 等待Driver线程执行完毕,获得开始信号 System.out.println("Working now ..."); doneSignal.countDown(); // 当前worker执行完毕,释放一个完成信号 } catch (InterruptedException e) { e.printStackTrace(); } } }
相关文章推荐
- 多线程辅助类-CountDownLatch的用法
- CountDownLatch用法
- 多线程辅助类-CountDownLatch的用法
- CountDownLatch的用法
- 【JAVA-并发】CountDownLatch用法和源码浅析
- 两个重要的多线程辅助类之CyclicBarrier和CountDownLatch的用法
- countdownlatch的用法
- 浅析Java中CountDownLatch用法
- CountDownLatch用法
- CountDownLatch的用法
- Java多线程---CountDownLatch用法实例
- CountDownLatch和CyclicBarrier 的用法
- CountDownLatch 多线程同步辅助类用法
- CountDownLatch和CyclicBarrier 的用法
- CountDownLatch的用法
- CountDownLatch用法
- java 多线程 CountDownLatch用法
- 闭锁CountDownLatch的用法
- CountDownLatch的用法
- CountDownLatch 用法