多线程-栅栏CyclicBarrier
2024-09-13 01:34:12
上一篇总结了闭锁CountDownLatch,这一篇总结一下栅栏CyclicBarrier。它们两者之间的区别主要是,闭锁是等待一个事件发生,比如上一篇的田径比赛,运动员等待裁判哨声一响就可以开始跑,假如这个时候某个选手走神了,还没准备就绪,这个时候其他队员不需要等待他准备就绪才可以开始跑。
而栅栏呢,就必须等待所有队员准备就绪的时候,才可以开始跑。类似生活中,我们几个人约好出去春游,出发前,我们在某一个地点集合,等所有人都到齐的时候,我们才开始搭车出去春游,如果某一个小伙伴还没到聚集地,我们就一直等到他到了,才开始出发。
闭锁用于等待事件,而栅栏用于等待其他线程准备就绪。下面看一下例子:
package cyclicBarrier.cyclicBarrier; import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class CyclicBarrierDemo { public static void main(String []args){ ExecutorService exec=Executors.newCachedThreadPool(); final CyclicBarrier barrier=new CyclicBarrier(5, new Runnable() {
public void run() {
System.out.println("大家都到齐了,一起出发...");
}
});
for(int i=1;i<=5;i++){
final int num=i;
Thread thread=new Thread(new Runnable() {
public void run() {
try {
Thread.sleep((long) (Math.random()*10000));
System.out.println(num+"号已经到达目的地..");
barrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
});
exec.execute(thread);
}
exec.shutdown();
}
}
运行结果如下:
参考地址:JAVA并发编程实战
http://m.jb51.net/article/63970.htm
最新文章
- Bootstrap WPF Style,Bootstrap风格的WPF样式
- php : 基础(5)
- [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
- Android笔记——什么是json?json如何使用?
- arduino上使用sprintf()函数输出float值出错
- Linux系统备份与还原
- amaze UI的使用
- 史上最全maven pom.xml详解
- asp net 编程问题 实现下一篇 和上一篇效果
- redis安装配置和使用;tomcat安装和使用
- new和instanceof的内部机制
- 关于mysql安装到最后一步老是停留在starting server,显示无响应
- E. Superhero Battle
- sparkStreaming序列化问题
- JS =>;处理单击事件与拖动事件并存
- Anaconda(python3.6)中使用python2.7
- javascript删除Cookie的正确方法(转载)
- jQuery UI全教程之一(dialog的使用教程)
- [Python学习]Iterator 和 Generator的学习心得