博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发之CountDownLatch
阅读量:6919 次
发布时间:2019-06-27

本文共 1282 字,大约阅读时间需要 4 分钟。

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

把Driver看作是一个监工,Worker看作是工人,有5个。

  • 监工发号施令后,工人们才可以干活。所以工人干活前调用startSignal.await(), 直到监工调用startSignal.countDown() 后Worker后续doWork才开始执行。 
  • 工人们干完活后通知监工,监工才可以接着发号。所以监工调用doneSignal.await()在哪儿等着,直到工人们都干完活(调用5次doneSignal.countDown())后,才能接着执行。

看下执行结果,有助于理解整个工作过程和latch机制:

doSomething

worker work.
worker work.
worker work.
worker work.
worker work.
doSomething

转载于:https://www.cnblogs.com/dreamysmurf/p/6119730.html

你可能感兴趣的文章
JavaScript 工作原理之八-Service Workers,生命周期及其使用场景
查看>>
JS中ArrayAPI学习笔记
查看>>
Longhorn:实现Kubernetes集群的持久化存储
查看>>
算法之双指针法(一)
查看>>
中间件事务码R3AC1里Block Size的含义
查看>>
Android 学习资料
查看>>
webpack.optimize.CommonsChunkPlugin的minChunks解析
查看>>
java9系列(九)Make G1 the Default Garbage Collector
查看>>
Javascript 项目常用的一些配置文件
查看>>
小白文,关于vuejs中的vuex计数小示例
查看>>
ZStack源码剖析之设计模式鉴赏——三驾马车
查看>>
学习笔记:util
查看>>
记一次Nodejs安全工单的处理过程_20171226
查看>>
Cloudera(CDH) 简介和图解在线安装
查看>>
Apache本地服务器配置
查看>>
重论JavaScript伪数组的种种
查看>>
入门到放弃node系列之网络模块(一)
查看>>
gitlab-runner-maven卡死的情况
查看>>
初学vue整理
查看>>
threejs中矩阵旋转原理
查看>>