public class CyclicBarrierTest { public static void main(String[] args) { final CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.println("cyclicBarrier")); for (int i = 0; i < 6; i++) { int finalI = i; new Thread(() -> { try { if(finalI > 2) Thread.sleep(2000); barrier.await(); System.out.printf(Thread.currentThread().getName() + "执行\n"); } catch (Exception e) { e.printStackTrace(); } } ).start(); } System.out.println(Thread.currentThread().getName() + "执行结束"); } } 与CountDownLatch不同的地方在于,CyclicBarrier在await()方法调用barrier.getParties()次后,调用此次await()循环后的代码就会被释放。 可以通过改变finalI与2的大小关系,就可以看到哪些线程实在哪次循环里面执行的。 CyclicBarrier在实例化的时候还可以传入一个Runnable实例,它在await()循环调用一次循环后,会执行一次。