CountDownLatch的用法,配图版
CountDownLatch 是线程协作中的并发流程控制的工具类,它能在多线程场景中,可以让多个线程执行完自己的任务后,在某个等待点集合,集合完毕后,再继续等待点后面的工作,如图
图上有5个蓝色的勇士,每个勇士需要到每扇门寻找钥匙后,就可以在关闭橙色公主的门前等待,直到所有勇士拿到所有钥匙,来开锁才能救出公主。救出公主的关键是必须有5把钥匙
其中一勇士调用了 CounDownLatch.count() 拿到了锁
勇士拿到锁后打开了一把锁
其它勇士也陆续拿到锁并打开锁了
最终救出了公主,因为满足了CountDownLatch.await() 的条件
5勇士救出了公主,这场景想想就觉得感动
代码演示
public class CountDownLatchDemo {static CountDownLatch countDownLatch = new CountDownLatch(5);public static void main(String[] args) {for (int i = 1; i < 6; ++i) {new Thread(new Task(), "勇士" + i).start();}try {System.out.println("等待勇士的搭救...");countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("勇士都到达,锁已全部打开,成功救出了公主,感动!!");}static class Task implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "拿到了钥匙");countDownLatch.countDown();System.out.println(Thread.currentThread().getName() + "开了锁");}}
}
上面的图所说的,拿到锁,其实是调用 CountDownLatch.countDown(),使得 CountDownLatch 类中的 count 变量减1,count 的初始值是创建对象的时候,传进去的参数值。
当 count减为0的时候,就满足 CountDownLatch.await() 的条件,所有等待在这个点的任务,都会继续执行下去
构造器方法
CountDownLatch(int count)
CountDownLatch类只提供了一个构造器,并没有其它构造器了,它所传入的参数,代表着你在到达 await()方法的地方的时候,其它地方需要调用多少次 countDown()方法的次数
public CountDownLatch(int count) {if (count < 0) throw new IllegalArgumentException("count < 0");this.sync = new Sync(count);}
从源码我们可以看到,传入的参数不能小于0,当小于0的时候,会抛出 IllegalArgumentException异常
等待方法
void await() throws InterruptedException boolean await(long timeout, TimeUnit unit)throws InterruptedException
第一个方法,当调用这个方法的时候,所有线程都会阻塞在这个点,当其它操作触及调用 countDown()方法,使得 count为0的时候,其它阻塞在这里的任务都会继续执行下去
第二个方法,在上面的基础上,加上了超时时间,这里的是等待其它任务在规定超时时间调用 countDown(),如果没有在超时时间内调用,则不阻塞其任务,直接放行任务,让任务继续执行下去
获取当前 count的数量
long getCount()
调用这个方法,可以知道现在count的值,从而知道还需要调用多少次 countDown()方法,从能满足 await()的条件
释放门闩
void countDown()
调用这个方法,可以让 count减1
注:当 count的值为0的时候,这时候无论有多少个任务执行到这个地方,都不会被阻塞了,因为 CountDownLatch只能用一次,而它的 count的值,不能被重置,跟 CyclicBarrier 有所区别
欢迎大家关注下个人的「公众号」:独醉贪欢
CountDownLatch的用法,配图版相关推荐
- CountDownLatch/CyclicBarrie用法记录
在jdk1.5中,java提供了很多工具类帮助我们进行并发编程,其中就有CountDownLatch和CyclicBarrie 1.CountDownLatch的用法 CountDownLatch 位 ...
- 2021投资大复盘】上个月年化收益50%,这个月到今天54%了,也在今天封盘了,来年我们再战江湖【配图版】
之前我复盘了年收益50%的部分,很高兴得到了老虎的热推,2021年工作压力超级大,再加上今天听说恒大出事了,加上美联储加息与否不太确定,今年准备封盘了. (1)50%的由来: 2021年2月份- 11 ...
- java并发包CountDownLatch的用法
public static void main(String[] args) {// countDownLatch初始化 ,其功能类似于计数器.. /*常见的应用场景: 某个线程必须等待其他的线程执行 ...
- CyclicBarrier和CountDownLatch的用法与区别
前言 CyclicBarrier和CountDownLatch这两个工具都是在java.util.concurrent包下,并且平时很多场景都会使用到. 本文将会对两者进行分析,记录他们的用法和区别. ...
- 2021最新Unity的jdk SE8(1.8.0 )的安装及环境配置 超级详细配图版
①安装jdk1.8.0 ①安装jdk1.8.0 我看大部分的博文都说直接去Java官网就行 但是我去官网发现jdk se8下载要登录,太麻烦了. 资源分享:提取码pcyx 下载完成后启动. 点击下一步 ...
- 数据降维1:主成分分析法思想及原理(配图版)
0x01 什么是主成分分析法 PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法(非监督的机器学习方法). 其最主要的用途在于&quo ...
- 爆笑造句狂潮 雷人语录合集配图版
今儿下午,同事不知从哪儿转来一链接,全办公室开始集体疯玩,其实很简单的造句游戏,没想到能玩儿成这么爆笑又雷人的结果来~~~特此总结个语录出来,这可才一天的成果呢!! 先看看标准句型!!We are o ...
- 一文搞懂 CountDownLatch 用法和源码!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! CountDownLatch 是多线程控制的一种工具,它被 ...
- CountDownLatch 用法和源码解析
CountDownLatch 是多线程控制的一种工具,它被称为 门阀. 计数器或者 闭锁.这个工具经常用来用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用).下面我们就来一起 ...
最新文章
- java 简单 语言_将简单的表达式语言放入java中
- 物联网通信协议全解析
- Spring中Bean的后置处理器
- 最近工程师怎么都在写公众号?这玩意到底能赚多少钱?
- android 自定义baseadapter listview,android之ListView和BaseAdapter的组合使用
- UVA - 101:The Blocks Problem
- ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区
- c语言作业的分析,C语言作业分析.doc
- 营业执照psd模板2020_荣誉证书聘书奖状模板,CFR矢量素材PSD源文件,700张精美套用...
- html鼠标滑过带音效,HTML5带音效的交互式日食动画
- 重写需要注意哪些方面?
- 4款最受欢迎的Mac原型工具
- 男生追女生的方法有哪些?
- yarn install报错及解决办法
- MATLAB中把Excel数据矩阵化,excel将表格数据矩阵-MATLAB怎么读取EXCEL中矩阵形式的数据,并存放在一......
- postman 安装失败 Failed to install the .NET Framework, try installingthe latest version manully
- 在vant组件下阻止手机自带键盘弹起
- Tuscany SCA软件架构设计理念分析鉴赏 (一)
- jQuery 实现音乐导航案例
- linux如何设置mac快捷键,Mac与Linux常用快捷键汇总
热门文章
- 2020A证(安全员)实操考试视频及A证(安全员)操作证考试
- 45+%录用率! ICASSP截稿延期, CV| NLP| 语音均可投, CCF B
- 【论文研读】-DiPETrans: A Framework for Distributed Parallel Execution of Transactions of Blocks in BLC
- 数据结构——单循环链表的
- 亲测,openxlpy和xlrd 统计excel的总行数,删除最后几行,再统计的话,还是原来的行数
- 如《老人与海》般孤勇【极学】
- 贪食蛇java源码_JAVA 贪食蛇 源码
- 查论文、期刊的排名等的方法
- 【VUE】字符串截取,数字截取
- sina网页新闻小偷原理及源代码(java版)