在Java并发编程中,我们经常会遇到多个线程需要相互等待、协同工作的场景。这时,Java CyclicBarrier 就是一个非常实用的同步辅助类。本教程将从零开始,手把手教你如何使用 CyclicBarrier,即使是编程小白也能轻松掌握!
CyclicBarrier 是 Java 并发包(java.util.concurrent)中的一个同步工具类,它允许一组线程互相等待,直到所有线程都到达某个“屏障点”(barrier point),然后一起继续执行后续任务。
与 CountDownLatch 不同的是,CyclicBarrier 是可重用的(cyclic 表示“循环”的意思),也就是说,当所有线程完成一次等待后,它可以被再次使用。
创建一个 CyclicBarrier 对象时,你需要指定参与同步的线程数量。每个线程在执行到屏障点时调用 await() 方法,当所有线程都调用了 await() 后,它们才会继续执行。
import java.util.concurrent.CyclicBarrier;public class CyclicBarrierExample { public static void main(String[] args) { int numberOfThreads = 3; CyclicBarrier barrier = new CyclicBarrier(numberOfThreads, () -> { System.out.println("所有线程已就位,开始下一步!"); }); for (int i = 0; i < numberOfThreads; i++) { new Thread(() -> { try { System.out.println(Thread.currentThread().getName() + " 正在准备..."); Thread.sleep((long) (Math.random() * 2000)); // 模拟准备时间 System.out.println(Thread.currentThread().getName() + " 准备完成,等待其他线程"); barrier.await(); // 等待其他线程 System.out.println(Thread.currentThread().getName() + " 继续执行后续任务"); } catch (Exception e) { e.printStackTrace(); } }).start(); } }} 在这个例子中,我们创建了 3 个线程,每个线程在完成自己的准备工作后调用 barrier.await()。只有当 3 个线程都调用了 await(),它们才会继续执行,并且会先执行我们在构造函数中传入的回调任务(打印“所有线程已就位…”)。
CyclicBarrier 提供了两个构造方法:
CyclicBarrier(int parties):指定参与同步的线程数。CyclicBarrier(int parties, Runnable barrierAction):除了线程数,还可以指定一个所有线程到达屏障后执行的回调任务(barrierAction)。以下是几个典型的 Java并发工具 CyclicBarrier 使用场景:
BrokenBarrierException。barrierAction 中执行耗时过长的操作,以免阻塞其他线程。CyclicBarrier使用教程 到这里就结束了。通过本文,你应该已经掌握了如何在 Java 中使用 CyclicBarrier 实现多线程同步。它是 Java 并发编程中不可或缺的工具之一,特别适合需要多个线程协同工作的场景。
希望这篇教程能帮助你更好地理解 Java CyclicBarrier!如果你觉得有用,不妨动手写个小程序试试看吧!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128760.html