上一篇总结了闭锁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

最新文章

  1. Bootstrap WPF Style,Bootstrap风格的WPF样式
  2. php : 基础(5)
  3. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes
  4. 如何在 ASP.NET MVC 中集成 AngularJS(1)
  5. Android笔记——什么是json?json如何使用?
  6. arduino上使用sprintf()函数输出float值出错
  7. Linux系统备份与还原
  8. amaze UI的使用
  9. 史上最全maven pom.xml详解
  10. asp net 编程问题 实现下一篇 和上一篇效果
  11. redis安装配置和使用;tomcat安装和使用
  12. new和instanceof的内部机制
  13. 关于mysql安装到最后一步老是停留在starting server,显示无响应
  14. E. Superhero Battle
  15. sparkStreaming序列化问题
  16. JS =&gt;处理单击事件与拖动事件并存
  17. Anaconda(python3.6)中使用python2.7
  18. javascript删除Cookie的正确方法(转载)
  19. jQuery UI全教程之一(dialog的使用教程)
  20. [Python学习]Iterator 和 Generator的学习心得

热门文章

  1. bzoj2656
  2. VMware虚拟机NAT(地址转换模式)
  3. 记录--常用的linux命令
  4. finereport-JS
  5. Taylor&#39;s theorem
  6. cookies与session
  7. caffe使用(1)
  8. Docker Libnetwork driver API
  9. 【我的Android进阶之旅】如何隐藏Android中EditText控件的默认下划线
  10. linux c编程:读写锁