CyclicBarrier实现原理
来源:互联网 发布:脑洞网络用语 编辑:程序博客网 时间:2024/06/05 23:49
CyclicBarrier原理
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到所有线程都到达某个公共屏障点(也可以叫同步点),即相互等待的线程都完成调用await方法,所有被屏障拦截的线程才会继续运行await方法后面的程序。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用。因为该屏障点在释放等待线程后可以重用,所以称它为循环的屏障点。CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达屏障点之后(但在释放所有线程之前),该命令只在所有线程到达屏障点之后运行一次,并且该命令由最后一个进入屏障点的线程执行。
CyclicBarrier中定义的成员属性
private final ReentrantLock lock = new ReentrantLock();private final Condition trip = lock.newCondition();private final int parties;private final Runnable barrierCommand;private Generation generation = new Generation();private int count;
其核心代码是 ReentrantLock 以及 Condition 的共享唤醒线程
多个线程竞争锁,保证计数器parties为原子操作,然后当parties执行为0时候,执行方法
//唤醒所有处于休眠状态的线程,恢复执行 //重置count值为parties //重置中断状态为true private void breakBarrier() { generation.broken = true; count = parties; trip.signalAll(); }
此时所有阻塞的线程继续执行
阅读全文
0 0
- CyclicBarrier实现原理
- CountDownLatch 和 CyclicBarrier 的运用及实现原理
- java CyclicBarrier原理和示例
- CountDownLatch & CyclicBarrier源码实现解析
- cyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- cyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- LeetCode | 两数之和
- python3 map函数
- 第三章(列表)
- ConcurrentLinkedQueue & CopyOnWriteArrayList
- (二)spring cloud微服务分布式云架构
- CyclicBarrier实现原理
- ReentrantLock实现原理
- spring-data-cassanra的简单使用
- MYSQL DB规范
- NOIP 2015 子串 (DP)
- Kafka集群配置
- 维护集合Ⅰ【无旋Treap数组模板】
- 权限修饰符
- Kafka知识点