package com.chen.practise;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class TestCycicBarries {
//栅栏的使用:当一组任务全部执行结束后,某个任务才可以执行。
//在所有 subtask执行前,maintask是阻塞的。
public static void main(String[] args) {
CyclicBarrier b = new CyclicBarrier(5, new MainTask());
new SubTask("A", b).start();
new SubTask("B", b).start();
new SubTask("C", b).start();
new SubTask("D", b).start();
new SubTask("E", b).start();
}
}
class MainTask implements Runnable{
public void run() {
System.out.println("终于等到maintask 执行了 ");
}
}
class SubTask extends Thread{
private String name;
private CyclicBarrier b;
public SubTask(String name, CyclicBarrier b) {
super();
this.name = name;
this.b = b;
}
public void run(){
System.out.println("并发任务"+name+"开始执行");
for (int i = 0; i < 999999; i++) ; //模拟耗时的任务
System.out.println("[并发任务" + name + "] 开始执行完毕,通知障碍器");
try {
b.await();//每一项执行完就通知障碍器
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果: