与CountDownLatch功能相反。每执行一次则加一,直至累计到指定的数量。
public class CyclicBarrierDemo {public static void main(String[] args) throws BrokenBarrierException, InterruptedException {CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> System.out.println("召唤神龙"));for (int i = 1; i <= 7; i++) {final int i1 = i;new Thread(() -> {System.out.println(Thread.currentThread().getName() + "收集到第 " + i1 + " 颗龙珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}).start();}}}
结果
Thread-0收集到第 1 颗龙珠Thread-2收集到第 3 颗龙珠Thread-1收集到第 2 颗龙珠Thread-3收集到第 4 颗龙珠Thread-4收集到第 5 颗龙珠Thread-5收集到第 6 颗龙珠Thread-6收集到第 7 颗龙珠召唤神龙
