java并发API:CyclicBarrier跑步比赛--一起跑
2016-01-02 19:06
543 查看
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点
(common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环
的 barrier。
CyclicBarrier 支持一个可选的
(common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环
的 barrier。
CyclicBarrier 支持一个可选的
Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。
public class CyclicBarrierTest { private final int RUNNER_COUNT = 10; Runnable runnable = new Runnable() { @Override public void run() { System.out.println("人到齐了,开跑...."); } }; final CyclicBarrier barrier = new CyclicBarrier(RUNNER_COUNT, runnable); public void goHome() throws InterruptedException, BrokenBarrierException { System.out.println(Thread.currentThread().getName() + "预备...."); barrier.await(); System.out.println(Thread.currentThread().getName() + "跑到终点...."); } public static void main(String[] args) throws InterruptedException, BrokenBarrierException { final CyclicBarrierTest instance = new CyclicBarrierTest(); /** * 每个线程代表一个Runner */ for (int i = 0; i < instance.RUNNER_COUNT; i++) { new Thread("Runner" + i + " ") { public void run() { try { instance.goHome(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }; }.start(); } } }结果:
Runner0 预备.... Runner3 预备.... Runner2 预备.... Runner1 预备.... Runner5 预备.... Runner4 预备.... Runner6 预备.... Runner8 预备.... Runner7 预备.... Runner9 预备.... 人到齐了,开跑.... Runner9 跑到终点.... Runner0 跑到终点.... Runner1 跑到终点.... Runner7 跑到终点.... Runner8 跑到终点.... Runner6 跑到终点.... Runner4 跑到终点.... Runner5 跑到终点.... Runner2 跑到终点.... Runner3 跑到终点....
相关文章推荐
- 仲恺ACM 1020:电梯升降【java】
- 用java解leetcode上的easy题(开始探险)
- freemaker 页面无法显示spring mvc 传递的对象属性
- 《java核心技术》的隐式参数与显式参数之说
- SpringMVC异常处理
- Core Java (十一) Java 继承,类,超类和子类
- java类继承总结一 父类类型与子类类型之间的转化问题(转)
- Android 开发环境安装配置 JDK1.8.0+Android studio
- eclipse插件使用
- JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论
- 【LWJGL2 WIKI】【基础篇】基础2:输入
- 将子类对象引用赋值给超类对象 JAVA 编译时多态性
- Spring注解大全
- java基础
- Hibernate在java中的CRUD
- java广度优先遍历
- Java 正则表达式
- 【LWJGL2 WIKI】【基础篇】基础1:显示
- 【LWJGL2 WIKI】翻译文章目录
- javaMail的实现