
Java并发编程实战:闭锁CountDownLatch,栅栏CyclicBarrier与信号量Semaphore
发布日期:2021-05-07 13:35:59
浏览次数:11
分类:精选文章
本文共 1080 字,大约阅读时间需要 3 分钟。
CountDownLatch和CyclicBarrier都是用于线程间等待的机制,但它们的侧重点和使用场景有所不同。CountDownLatch更像是一扇门,只有在达到结束状态后,才能打开让所有线程通过。而CyclicBarrier则是一道栅栏,它会阻塞一组线程,直到所有线程到达栅栏位置才会打开。
CountDownLatch的工作原理
CountDownLatch是一种闭锁,相当于一扇门。在闭锁处于结束状态之前,这扇门是关闭的,任何线程都无法通过。当闭锁到达结束状态时,它会打开,允许所有线程通过。值得注意的是,一旦闭锁进入结束状态,它就不会再改变状态,永远保持打开状态。闭锁通常用来等待某个操作完成,比如等待数据库连接可用或等待某个文件操作完成。CyclicBarrier的工作原理
CyclicBarrier则是一道可以重置的栅栏。当线程到达栅栏位置并调用await()方法时,它会阻塞,直到所有线程都到达栅栏位置。如果所有线程都到达栅栏位置,栅栏就会打开,释放所有线程,并重置栅栏以便下次使用。CyclicBarrier的主要用途是让一组线程等待所有线程到达某个点才能继续执行。例如,用于复杂的多线程计算任务,确保所有子任务同时完成后再进行下一步。CountDownLatch和CyclicBarrier的区别
两者的主要区别在于,一是CountDownLatch是“一次性”对象,一旦进入结束状态就无法被重置;而CyclicBarrier可以多次重置和使用。二是CountDownLatch用于等待时间,而CyclicBarrier用于等待其他线程到达特定点。此外,关于Semaphore(计数信号量)的使用,它用于控制对某个资源的同时访问数量。Semaphore通过管理一组许可证(permit)来实现资源池或对容器施加边界。可以想象,Semaphore就像是一扇有多个门的门禁系统,只有在一定数量的许可证存在时,才能允许多个线程通过。
Semaphore的release()方法的作用是释放一个许可证,增加可用许可证的数量。如果有线程正在等待acquire()方法,它会立即获得一个许可证并继续执行。值得注意的是,线程不需要必须调用acquire()才能调用release(),但正确使用Semaphore需要遵循应用程序的编程惯例。
总的来说,CountDownLatch、CyclicBarrier和Semaphore都是多线程编程中常用的同步机制,它们各自有不同的用途和适用场景。在选择正确的机制时,需要根据具体的应用需求来决定。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月18日 03时24分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
量化新手初识流数据表
2019-03-04
Linux中常见的echo是什么意思
2019-03-04
国内量化交易现状总结
2019-03-04
阿里云云解析DNS各种概念深度剖析
2019-03-04
SQLite基础用法
2019-03-04
(20200328已解决)从docker容器内复制文件到宿主机
2019-03-04
理解Docker ulimit参数
2019-03-04
pandas.groupby().rank()用法详解
2019-03-04
Factor Exposure因子暴露
2019-03-04
理解zvt in Python on Quant
2019-03-04
将DataFrame作为邮件正文HTML发送 in Python
2019-03-04
理解Python系统下的时间格式
2019-03-04
《经济机器是怎样运行的》笔记(三)
2019-03-04
prod()与cumprod()区别cumsum()
2019-03-04
Python提升回测速度concurrnet.futures模块详解
2019-03-04
Python语言'类'概念再理解
2019-03-04
(2019.6.27)Anaconda清华镜像已恢复使用
2019-03-04