首页IT科技countdownlatch用法(CountDownLatch的使用)

countdownlatch用法(CountDownLatch的使用)

时间2025-05-01 05:08:33分类IT科技浏览3519
导读:1.概述 CountDownLatch就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。...

1.概述

CountDownLatch就是一个或者一组线程在开始执行操作之前           ,必须要等到其他线程执行完才可以           。我们举一个例子来说明                ,在考试的时候      ,老师必须要等到所有人交了试卷才可以走                 。此时老师就相当于等待线程           ,而学生就好比是执行的线程     。

注意:java中还有一个同步工具类叫做CyclicBarrier                ,他的作用和CountDownLatch类似     。同样是等待其他线程都完成了      ,才可以进行下一步操作     ,我们再举一个例子                ,在打王者的时候           ,在开局前所有人都必须要加载到100%才可以进入                 。否则所有玩家都相互等待           。

我们看一下区别:

CountDownLatch: 一个线程(或者多个)     , 等待另外N个线程完成某个事情之后才能执行     。 CyclicBarrier : N个线程相互等待                ,任何一个线程完成之前           ,所有的线程都必须等待                。关键点其实就在于那N个线程(1)CountDownLatch里面N个线程就是学生,学生做完了试卷就可以走了                ,不用等待其他的学生是否完成(2)CyclicBarrier 里面N个线程就是所有的游戏玩家                ,一个游戏玩家加载到100%还不可以,必须要等到其他的游戏玩家都加载到100%才可以开局

2.简单使用

运行结果

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     。

声明:本站所有文章           ,如无特殊说明或标注     ,均为本站原创发布           。任何个人或组织                ,在未征得本站同意时           ,禁止复制           、盗用                 、采集     、发布本站内容到任何网站     、书籍等各类媒体平台                 。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理     。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
windmillworker.exe是什么程序(WmiPrvSE.exe是什么进程?WmiPrvSE.exe会是病毒吗?) discuzdatabaseerror145(Discuz! Q继承了Discuz! X的社区的核心能力,增强了变现的能力,原生接入微信生态,且更适配今天移动端的交互,帮助用户碎片化的信息发布及获取。Discuz! Q现支持多种升级方式,本文主要)