与CountDownLatch功能相反。每执行一次则加一,直至累计到指定的数量。

    1. public class CyclicBarrierDemo {
    2. public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
    3. CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> System.out.println("召唤神龙"));
    4. for (int i = 1; i <= 7; i++) {
    5. final int i1 = i;
    6. new Thread(() -> {
    7. System.out.println(Thread.currentThread().getName() + "收集到第 " + i1 + " 颗龙珠");
    8. try {
    9. cyclicBarrier.await();
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. } catch (BrokenBarrierException e) {
    13. e.printStackTrace();
    14. }
    15. }).start();
    16. }
    17. }
    18. }

    结果

    1. Thread-0收集到第 1 颗龙珠
    2. Thread-2收集到第 3 颗龙珠
    3. Thread-1收集到第 2 颗龙珠
    4. Thread-3收集到第 4 颗龙珠
    5. Thread-4收集到第 5 颗龙珠
    6. Thread-5收集到第 6 颗龙珠
    7. Thread-6收集到第 7 颗龙珠
    8. 召唤神龙