论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
CountDownLatch的使用
CountDownLatch的使用
火影
金牌会员
|
2023-2-22 15:38:26
|
显示全部楼层
|
阅读模式
楼主
主题
786
|
帖子
786
|
积分
2358
1.概述
CountDownLatch
就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。
注意:java中还有一个同步工具类叫做
CyclicBarrier
,他的作用和CountDownLatch类似。同样是等待其他线程都完成了,才可以进行下一步操作,我们再举一个例子,在打王者的时候,在开局前所有人都必须要加载到100%才可以进入。否则所有玩家都相互等待。
我们看一下区别:
CountDownLatch: 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。 CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。关键点其实就在于那N个线程(1)CountDownLatch里面N个线程就是学生,学生做完了试卷就可以走了,不用等待其他的学生是否完成(2)CyclicBarrier 里面N个线程就是所有的游戏玩家,一个游戏玩家加载到100%还不可以,必须要等到其他的游戏玩家都加载到100%才可以开局
2.简单使用
//指定人数
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(){
@Override
public void run() {
super.run();
System.out.println("第一个人交卷");
//countDownLatch的count减一
countDownLatch.countDown();
}
}.start();
try {
//等待时间 如果countDownLatch的count=0 返回true 否则返回false 这里处于阻塞状态
boolean await = countDownLatch.await(10, TimeUnit.SECONDS);
System.out.println(await);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("考试结束");
复制代码
运行结果
3.原理
CountDownLatch主要使用countDown方法进行减1操作,使用await方法进行等待操作
countDown
OK。到了这一步我们可能会纳闷,sync是个什么鬼,releaseShared方法又是如何实现的。我们不妨接着看源码
在这里我们发现继承了AbstractQueuedSynchronizer(AQS)。AQS的其中一个作用就是维护线程状态和获取释放锁。在这里也就是说CountDownLatch使用AQS机制维护锁状态。而releaseShared(1)方法就是释放了一个共享锁。
await原理
不带参数的await会一直等待,直到CountDownLatch的count为0,带参数的await最多等待指定时间退出,如果时间没到,CountDownLatch的count为0就立刻退出。如果CountDownLatch的count为0返回true,否则返回false。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
火影
金牌会员
这个人很懒什么都没写!
楼主热帖
最全Windows98原版系统镜像下载(特点 ...
Redis 原理 - String
用python反弹shell
微信小程序+web数据库的开发实践 ...
SAP各模块优缺点和发展简析
如何配置 SLO
LOOK!两步控制直播APP源码平台的稳定 ...
Spring(SpringBoot)--解决拦截器中注入 ...
已测试安卓11
公众号接入 ChatGPT 了!
标签云
挺好的
服务器
快速回复
返回顶部
返回列表