0
点赞
收藏
分享

微信扫一扫

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

无愠色 2022-02-15 阅读 31

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();
        }
    }
}

效果:
在这里插入图片描述

CountDownLatch与CyclicBarrier对比区别:
CountDownLatch使某个线程需要等待其他线程结束后才运行,CyclicBarrier使所有线程等待然后同时运行。
在这里插入图片描述

举报

相关推荐

0 条评论