CyclicBarrier简介
CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
注意比较CountDownLatch和CyclicBarrier:
(01) CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程相互等待。
(02) CountDownLatch的计数器无法被重置;CyclicBarrier的计数器可以被重置后使用,因此它被称为是循环的barrier。
CyclicBarrier函数列表
CyclicBarrier(int parties)
创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,但它不会在启动 barrier 时执行预定义的操作。
CyclicBarrier(int parties, Runnable barrierAction)
创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入 barrier 的线程执行。
int await()
在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
int await(long timeout, TimeUnit unit)
在所有参与者都已经在此屏障上调用 await 方法之前将一直等待,或者超出了指定的等待时间。
int getNumberWaiting()
返回当前在屏障处等待的参与者数目。
int getParties()
返回要求启动此 barrier 的参与者数目。
boolean isBroken()
查询此屏障是否处于损坏状态。
void reset()
将屏障重置为其初始状态。
CyclicBarrier数据结构
CyclicBarrier的UML类图如下:
CyclicBarrier是包含了"ReentrantLock对象lock"和"Condition对象trip",它是通过独占锁实现的。下面通过源码去分析到底是如何实现的。
CyclicBarrier源码分析(基于JDK1.7.0_40)
CyclicBarrier完整源码(基于JDK1.7.0_40
1 ...阅读原文
推荐文章
1. Java开发者值得关注的7款新工具
(R:1839)[2014-12-24]
2. Java多线程系列--“基础篇”06之 线程让步 (R:1094)[2017-05-02]
3. Java多线程系列--“JUC锁”06之 Condition条件 (R:1298)[2017-08-03]
4. Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例 (R:1269)[2017-09-13]
5. ThreadDump分析笔记: 解读堆栈 (R:2045)[2019-03-06]
6. Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类 (R:1189)[2017-07-13]
7. Java中有关Null的9件事 (R:1600)[2015-01-04]
8. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别 (R:1109)[2017-04-29]
9. Java多线程系列--“JUC锁”01之 框架 (R:1176)[2017-07-19]
10. 《Java 并发编程实战》PDF下载 (R:3877)[2015-05-03]
11. Java多线程系列--“JUC锁”05之 非公平锁 (R:1106)[2017-07-27]
12. Java程序员面试失败的5大原因 (R:1098)[2015-04-08]
13. Java主流Web Service框架介绍:CXF和Axis2 (R:537)[2021-11-24]
14. 源码阅读之CyclicBarrier (R:1321)[2017-09-20]
15. 企业级Java应用最重要的4个性能指标 (R:1729)[2015-07-01]
2. Java多线程系列--“基础篇”06之 线程让步 (R:1094)[2017-05-02]
3. Java多线程系列--“JUC锁”06之 Condition条件 (R:1298)[2017-08-03]
4. Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例 (R:1269)[2017-09-13]
5. ThreadDump分析笔记: 解读堆栈 (R:2045)[2019-03-06]
6. Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类 (R:1189)[2017-07-13]
7. Java中有关Null的9件事 (R:1600)[2015-01-04]
8. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别 (R:1109)[2017-04-29]
9. Java多线程系列--“JUC锁”01之 框架 (R:1176)[2017-07-19]
10. 《Java 并发编程实战》PDF下载 (R:3877)[2015-05-03]
11. Java多线程系列--“JUC锁”05之 非公平锁 (R:1106)[2017-07-27]
12. Java程序员面试失败的5大原因 (R:1098)[2015-04-08]
13. Java主流Web Service框架介绍:CXF和Axis2 (R:537)[2021-11-24]
14. 源码阅读之CyclicBarrier (R:1321)[2017-09-20]
15. 企业级Java应用最重要的4个性能指标 (R:1729)[2015-07-01]