CycliBarriar
public class CyclicBarrierDemo {static class TaskThread extends Thread {CyclicBarrier barrier;
public TaskThread(CyclicBarrier barrier) {
this.barrier = barrier;
}@Override
public void run() {
try {
Thread.sleep(1000);
System.out.println(getName() + " 到达栅栏 A");
barrier.await();
System.out.println(getName() + " 冲破栅栏 A");
Thread.sleep(2000);
System.out.println(getName() + " 到达栅栏 B");
barrier.await();
System.out.println(getName() + " 冲破栅栏 B");
} catch (Exception e) {
e.printStackTrace();
}
}
}public static void main(String[] args) {
int threadNum = 5;
CyclicBarrier barrier = new CyclicBarrier(threadNum, new Runnable() {@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 完成最后任务");
}
});
for(int i = 0;
i < threadNum;
i++) {
new TaskThread(barrier).start();
}
}}
CyclicBarrier 构造函数源码
文章图片
Snipaste_2021-03-24_10-37-57.png 【CycliBarriar】
CyclicBarrier 与 CountDownLatch 区别
- CountDownLatch 是一次性的,CyclicBarrier 是可循环利用的
- CountDownLatch 参与的线程的职责是不一样的,有的在倒计时,有的在等待倒计时结束。CyclicBarrier 参与的线程职责是一样的。
推荐阅读
- 136.|136. Single Number
- 第一个程序——helloworld
- 【Tomcat源码阅读分享】—(5)Tomcat中的ClassLoader
- 如何理解es6中的class,以及class中的constructor函数
- 关于|关于 java.lang.NoClassDefFoundError: com.umeng.analytics.d的问题
- Panda|Panda Class 中班生活之开学Day3.
- http://note.youdao.com/yws/public/redirect/share?id=8e5a812e5778216a0752f838e6b9ae37&type=false
- objc_class|objc_class 中 cache 原理分析
- 数据结构|C++技巧(用class类实现链表)
- 416.|416. 分割等和子集