> 文档中心 > 并发类编程—CyclicBarrier(循环屏蔽)

并发类编程—CyclicBarrier(循环屏蔽)

CyclicBarrier:循环屏蔽,CyclicBarrier允许一组线程在到达某个栅栏点(common barrier point)互相等待,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行,可以重复使用,当计数变为定义数值后再次调用await()又会开始新的一轮计数。

代码实现:

public class Test {    public static void main(String[] args) { CyclicBarrier barrier = new CyclicBarrier(7, () -> System.out.println("所以人进入教室")); for (int a = 1; a <= 7; a++) {     final int temp = a;     new Thread(() -> {  System.out.println("第" + temp + "位到达");  try {      barrier.await();      // await可以设置超时时间,当超过等待时候后,则回抛出异常,然后结束等待      // barrier.await(1,TimeUnit.SECONDS);      System.out.println("第" + temp + "已准备好上课!");  } catch (Exception e) {      e.printStackTrace();  }     }     ).start(); }    }}

效果:
并发类编程—CyclicBarrier(循环屏蔽)

CountDownLatch与CyclicBarrier对比区别:
CountDownLatch使某个线程需要等待其他线程结束后才运行,CyclicBarrier使所有线程等待然后同时运行。
并发类编程—CyclicBarrier(循环屏蔽)