与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 颗龙珠
召唤神龙