Java中cyclicbarrier的用法是什么

   2025-02-13 8190
核心提示:CyclicBarrier是Java中的一个同步辅助类,它可用于让一组线程在某个条件达成时互相等待,然后同时继续执行。它的用法如下:创建C

CyclicBarrier是Java中的一个同步辅助类,它可用于让一组线程在某个条件达成时互相等待,然后同时继续执行。它的用法如下:

创建CyclicBarrier对象时需要指定一个parties参数,表示需要互相等待的线程数量。当线程到达屏障点时,调用CyclicBarrier的await()方法进行等待。当等待的线程数达到指定数量时,所有线程会被释放,并且屏障重置,可以再次使用。可以通过CyclicBarrier的构造方法中的Runnable参数,在屏障点通过一个特定的线程来执行一些额外的操作,例如输出等。

下面是一个简单的示例,演示了CyclicBarrier的用法:

import java.util.concurrent.CyclicBarrier;public class CyclicBarrierExample {    public static void main(String[] args) {        final int numThreads = 3;        CyclicBarrier barrier = new CyclicBarrier(numThreads, () -> {            System.out.println("All threads have reached the barrier");        });        for (int i = 0; i < numThreads; i++) {            Thread thread = new Thread(new Worker(barrier));            thread.start();        }    }    static class Worker implements Runnable {        private final CyclicBarrier barrier;        public Worker(CyclicBarrier barrier) {            this.barrier = barrier;        }        @Override        public void run() {            try {                System.out.println(Thread.currentThread().getName() + " is waiting at the barrier");                barrier.await();                System.out.println(Thread.currentThread().getName() + " has crossed the barrier");            } catch (Exception e) {                e.printStackTrace();            }        }    }}

运行上述代码,会创建3个线程,在屏障点处等待,当所有线程都到达屏障点时,所有线程会继续执行,并输出相应的信息。

注意:CyclicBarrier与CountDownLatch的区别在于,CyclicBarrier在达到屏障点时,所有线程会被释放并继续执行,而CountDownLatch是一次性的,到达指定数量后,所有线程都会释放,但不能再次使用。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言