由于CyclicBarrier计数达到指定后会重新循环使用,所以CyclicBarrier可以用在所有子线程之间互相等待多次的情形。
比如在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。
应用场景:
一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务
案例代码:
public class CyclicBarrierTest {
//子任务执行
private static class SubTask implements Runnable{
private int[] sum;
private int index;
private CyclicBarrier barrier;
public SubTask(int[]sum,int index,CyclicBarrier barrier) {
this.sum=sum;
this.index=index;
this.barrier=barrier;
}
@Override
public void run() {
//生成一个随机数放入数组中
Random random=new Random();
sum[index]=random.nextInt(1000);
try {
barrier.await();//子任务执行完成时,等待其他线程执行