您的位置:首页 > 编程语言 > Java开发

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;
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: