专业的编程技术博客社区

网站首页 > 博客文章 正文

CyclicBarrier简单使用

baijin 2025-01-01 17:53:52 博客文章 20 ℃ 0 评论

CyclicBarrier简单使用

  • 描述: CyclicBarrier允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。 屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。
  • 用法:5个人开会,只有5个人都到达会议室后,才能开会,然后发表讲话。
    public static void main(String[] args) throws InterruptedException {
        // 所有人到齐,开会
        CyclicBarrier cyclicBarrier = new CyclicBarrier(5, () -> {
            System.out.println("所有人到齐,开会!");
        });

        for (int i = 1; i <= 5; i++) {

            new Thread(() -> {
                try {
                    System.out.println("第"+Thread.currentThread().getName() + "个人到达会议室");
                    cyclicBarrier.await();//等待其他人到达
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
                System.out.println("第"+Thread.currentThread().getName() + "个人发表讲话");
            }, String.valueOf(i)).start();
        }
    }

CountDownLatch与CyclicBarrier的区别

  • CountDownLatch主要是实现了1个或N个线程需要等待其他线程完成某项操作之后才能继续往下执行操作,描述的是1个线程或N个线程等待其他线程的关系。
  • CyclicBarrier主要是实现了多个线程之间相互等待,直到所有的线程都满足了条件之后各自才能继续执行后续的操作,描述的多个线程内部相互等待的关系。
  • CountDownLatch是一次性的,而CyclicBarrier则可以被重置而重复使用。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表