CyclicBarrier 是一种线程协作的方法,它可以让一个线程执行到某个点停止,并等待其它线程到达这个点集结完毕再继续运行。
从名字的翻译可以看出 CyclicBarrier是「篱栅」,你可以想象在某个赛道上有比赛,每场比赛需要5匹马到达篱栅才能开始,如下
从这图可以看出,有5匹马要进行比赛,但由于马5没有到达赛场,而导致比赛不能开始,下面是代码演示
public class CyclicBarrierDemo {
static CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(5);
for (int i = 0; i < 4; ++i) {
threadPool.submit(new Task());
}
threadPool.shutdown();
}
static class Task implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()
+ "已就位,等待其它马进场");
try {
cyclicBarrier.await(); //await()方法,等待设置的参数的个数的线程集结完毕
System.out.println(Thread.currentThread().getName()
+ "开始赛跑");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();