CyclicBarrier
- 它允许一组线程相互等待,直到达到某个公共屏障点,也就是阻塞在调用cyclicBarrier.await()的地方。
- 使用场景:类似CountDownLatch,但CyclicBarrier提供了几个countDownLatch没有的方法以应付更复杂的场景。
备注:
- 看上去功能跟CountDownLatch差不多,但CountDownLatch的计数无法被重置,如果需要重置,还是需要考虑使用CyclicBarrier。
- 另外,CyclicBarrier初始化时还可添加一个Runnable的参数,此Runnable在CyclicBarrier的数目达到后,所有其他线程被唤醒前被最后一个进入CyclicBarrier的线程执行。
一、CyclicBarrier的使用:
public void latch() throws InterruptedException{
int count = 5;
CyclicBarrier cb = new CyclicBarrier(count,new Runnable(){
@Override
public void run(){
System.out.println("全部执行完毕");
}
});
ExecutorService executorService = Executors.newFixedThreadPool(count);
while(true){
for(int x = 0;x < count;x++){
executorService.execute(new Worker(x,cb));
}
}
}
Class Worker extends Thread{
Integer start;
CyclicBarrier cyclicBarrier;
public Worker(Integer start,CyclicBarrier cyclicBarrier){
this.start = start;
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run(){
System.out.println(start + "已执行");
try{
cyclicBarrier.await();
}catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
/*
0 已执行
3 已执行
4 已执行
2 已执行
1 已执行
全部执行完毕
0 已执行
1 已执行
2 已执行
3 已执行
4 已执行
全部执行完毕
.....
*/
更多java基础总结(适合于java基础学习、java面试常规题):
总结篇(9)---字符串及基本类 (1)字符串及基本类之基本数据类型
总结篇(10)---字符串及基本类 (2)字符串及基本类之java中公共方法及操作
总结篇(12)---字符串及基本类 (4)Integer对象
总结篇(14)---JVM(java虚拟机) (1)JVM虚拟机概括
总结篇(15)---JVM(java虚拟机) (2)类加载器
总结篇(16)---JVM(java虚拟机) (3)运行时数据区
总结篇(17)---JVM(java虚拟机) (4)垃圾回收
总结篇(18)---JVM(java虚拟机) (5)垃圾回收算法
总结篇(19)---JVM(java虚拟机) (6)JVM调优
总结篇(24)---Java线程及其相关(2)多线程及其问题
总结篇(25)---Java线程及其相关(3)线程池及其问题
总结篇(26)---Java线程及其相关(4)ThreadLocal
总结篇(27)---Java并发及锁(1)Synchronized
总结篇(31)---JUC工具类(1)CountDownLatch
本文介绍了Java并发工具类CyclicBarrier的原理与使用,包括其与CountDownLatch的区别,以及在多线程同步中的应用。通过实例展示了CyclicBarrier如何在所有线程到达屏障点后执行指定任务,并且可以重置计数,便于重复使用。此外,还提供了完整的Java代码示例来解释CyclicBarrier的工作流程。
6809

被折叠的 条评论
为什么被折叠?



