工作过程
允许线程之间互相等待,知道所有线程都到达公共屏障点才可以继续往下执行。
线程执行调度任务作业时,每次屏障+1,直到到达公共屏障点才可以继续执行公共屏障的任务调度,如果无法到达公共屏障点直接线程直接堵塞并且超时。
final CyclicBarrier cyclicBarrier = new CyclicBarrier(2, new Runnable() {
//当屏障达到2的时候,意味着业务1和业务2都完成之后,才会执行业务3和业务4,
//如果屏障无法达到2的话,new Runable将会被阻塞,不会执行业务3和业务4,
public void run() {
System.out.println("业务3");
System.out.println("业务4");
}
});
new Thread( new Runnable() {
public void run() {
try {
System.out.println("业务1");
cyclicBarrier.await();//屏障+1
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
System.out.println("业务2");
cyclicBarrier.await();//屏障+1
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
使用建议:并行任务调度合并计算可以使用,但是建议只做面试准备,实际很难保证所有任务调度完成。