JAVA多线程之(CyclicBarrier)
2016-03-20 16:06
375 查看
CyclicBarrier与CountDownLatch类似,一般用于任务拆分,例如一个任务分派多个子任务,然后组任务需要等待所有子任务执行结束后合并子任务返回的结果。具体请参照实例:
package nc.com.thread.other; import java.util.Random; import java.util.concurrent.CyclicBarrier; /** * 一般在应用任务拆分时使用,先拆分再合并子任务结果的处理 * @ClassName: CyclicBarrierTest * @Description: TODO(这里用一句话描述这个类的作用) * @author A18ccms a18ccms_gmail_com * @date 2015-12-20 下午05:30:38 * */ public class CyclicBarrierTest { private static boolean finished=false; public static void main(String[] args) { CyclicBarrier readybarr = new CyclicBarrier(3,new recorder()); for(int i=0;i<3;i++){ new Thread(new Runner(readybarr), "运动员"+i).start(); } } static class Runner implements Runnable{ CyclicBarrier readybarr; public Runner(CyclicBarrier readybarr){ this.readybarr=readybarr; } @Override public void run() { try { Thread.sleep(1000 * (new Random()).nextInt(8)); System.out.println(""+Thread.currentThread().getName()+"已经在起跑线做好了准备......"); readybarr.await(); System.out.println(""+Thread.currentThread().getName()+"开始跑"); Thread.sleep(1000 * (new Random()).nextInt(8)); System.out.println(""+Thread.currentThread().getName()+"到达终点"); finished =true; readybarr.await(); } catch (Exception e) { e.printStackTrace(); } } } static class recorder implements Runnable{ @Override public void run() { if(finished){ System.out.println("比赛结束,技术台公布成绩"); finished =false; } } } }
相关文章推荐
- myeclipse2014如何创建user library
- java设计模式基础之设计原则
- Leetcode:278. First Bad Version(JAVA)
- Java学习之InputStream中read()与read(byte[] b)
- myeclipse的buildpath 和lib引入的区别
- [分拣思想]——对象计数
- 20145236 冯佳 《Java程序设计》第3周学习总结
- Java自动装箱和拆箱定义
- struts2中的constant配置
- 关于 Java 中 正则表达式的 MULTILINE 标志
- Spark读取Hbase中的数据
- JAVA多线程之(CountDownLatch)
- JS基本类型与Java的区别复习
- Leetcode: 125. Valid Palindrome(JAVA)
- Eclipse调试常用技巧
- java安全(三)摘要算法MD5
- java大数计算
- Spring自定义属性编辑器及原理解释.md
- Java初始化顺序
- 设计模式--策略模式