CyclicBarrier的用法
CyclicBarrier (加法计数器)
关闸,当有指定个数线程等待时,开闸,执行每个线程cyclicBarrier.await()后的操作
例:田径比赛,当所有参赛选手都到入位时(即已有给定数量线程调用cyclicBarrier.await();),开信号枪,所有选手进入比赛(执行各自线程中的任务)
package juc.add;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* @Description: juc.add
* @version: 1.0
*/
//加法计数器
public class CyclicBarrierDemo {
public static void main(String[] args) {
/*
田径比赛
*/
//当给定数量的线程(线程)等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。
CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{
System.out.println("所有参赛选手已准备就绪,比赛开始!");
});
for (int i = 1; i <= 7; i++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"号选手准备就绪!");
try {
cyclicBarrier.await();//等待所有 parties已经在这个障碍上调用了 await 。(让线程阻塞直到有7个线程阻塞于此)
System.out.println(Thread.currentThread().getName()+"号选手冲入终点!");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
},String.valueOf(i)).start();
}
}
}
运行结果: