JAVA多线程之(CyclicBarrier)

来源:互联网 发布:系统之家windows vista 编辑:程序博客网 时间:2024/05/17 06:40

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;}@Overridepublic 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{@Overridepublic void run() {if(finished){System.out.println("比赛结束,技术台公布成绩");finished =false;}}}}



0 0