CyclicBarrier 介绍
CyclicBarrier 可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用 await 方法,这个方法将阻塞直到所有线程都到达栅栏位置。如果所有线程都到达栅栏位置,那么栅栏将打开,此时所有的线程都将被释放,而栅栏将被重置以便下次使用。
使用示例
public class Test {
public static void main(String[] args) throws Exception{
CyclicBarrier barrier = new CyclicBarrier(3, ()-> {
System.out.println("3个线程执行完毕,即可召唤圣龙!");
}); //计时器
for(int i=1; i<=3; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+":出来吧,无敌圣龙!");
try {
barrier.await(); //等待
} catch (Exception e) {
e.printStackTrace();
}
}, "Thread-"+i).start();
}
barrier.reset(); //重置
}
}
结果:
Thread-1:出来吧,无敌圣龙!
Thread-2:出来吧,无敌圣龙!
Thread-3:出来吧,无敌圣龙!
3个线程执行完毕,即可召唤圣龙