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个线程执行完毕,即可召唤圣龙

相关文章: