CyclicBarrier
来源:互联网 发布:淘宝生鲜都发空运吗 编辑:程序博客网 时间:2024/06/07 13:39
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。
CyclicBarrier类似于CountDownLatch也是个计数器, 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。 CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 CyclicBarrier初始时还可带一个Runnable的参数,此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
举个栗子:几个小朋友去一起去上学,大家会在一个地方集中,所有的小朋友都要先从家里到达集中地,等集中地所有小朋友都到齐之后,然后一起去学校。这个集中地就是公共屏障点
下面就这个场景实现:
/** * Copyright © 2017 公司名称. All rights reserved. * * @Title: CyclicBarrierTest.java * @Prject: thread * @Package: com.sun.test.cyclicBarrier * @Description: TODO * @author: sunqz * @date: 2017年5月30日 下午9:36:45 * @version: V1.0 */package com.sun.test.cyclicBarrier;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * @ClassName: CyclicBarrierTest * @Description: 测试CyclicBarries * @author: sunqz * @date: 2017年5月30日 下午9:36:45 */public class CyclicBarrierTest {private static CyclicBarrier barrier = new CyclicBarrier(3);/** * * @ClassName: Child * @Description: 模拟小朋友去上学线程 * @author: Dell * @date: 2017年5月30日 下午9:40:00 */public static class Child implements Runnable { private String name; public Child(String name) { this.name = name; } @Override public void run() { try { Thread.sleep(1000 * (new Random()).nextInt(5)); System.out.println(name + " 到达集中地."); barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } System.out.println(name + " Go school !!"); } } public static void main(String[] args) { Thread t1 = new Thread(new Child("小明")); Thread t2 = new Thread(new Child("小华")); Thread t3 = new Thread(new Child("小芳")); t1.start(); t2.start(); t3.start();}}
小明 到达集中地.
小芳 到达集中地.
小华 到达集中地.
小华 Go school !!
小明 Go school !!
小芳 Go school !!
阅读全文
0 0
- cyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- cyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- CyclicBarrier
- 常用的几个网站
- bzoj 1185 [HNOI2007]最小矩形覆盖(坑)
- 多态草稿
- (LeetCode) 338. Counting Bits
- STL库学习 参考大道至简(更新完毕)
- CyclicBarrier
- javascript:touch事件
- 持久化存储技术之SharedPreferences存储
- D3 GEO应用专题(一):绘制旋转的3D地球
- 搜索 J
- 第二十二天 http状态管理技术-cookies和session
- 机器学习adaboost实现
- 2017年河南省ACM省赛 Problem F: Binary to Prime
- C# Winform Chart控件使用