在Java并发工具中,CountDownLatch 是一个非常实用的同步辅助类,它允许一个或多个线程等待,直到其他线程完成一组操作。本文将从零开始,用通俗易懂的方式带你彻底掌握 CountDownLatch 的使用方法,即使是编程小白也能轻松上手!
CountDownLatch 是 java.util.concurrent 包中的一个类,它的作用就像一个“倒计时门闩”。你可以初始化一个计数器(比如设为3),每当有线程完成任务后就调用 countDown() 方法将计数器减1。而其他需要等待这些任务完成的线程则调用 await() 方法阻塞自己,直到计数器减到0,所有等待的线程才会被唤醒继续执行。
CountDownLatch(int count):构造函数,设置初始计数值。await():使当前线程等待,直到计数器归零(除非线程被中断)。countDown():将计数器减1。getCount():返回当前计数值(仅用于调试和监控)。假设我们有一个主程序,需要等待3个子任务全部完成后才能继续执行。我们可以使用 CountDownLatch 来实现这个需求。
import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountDownLatchExample { public static void main(String[] args) throws InterruptedException { // 初始化一个计数器为3的CountDownLatch CountDownLatch latch = new CountDownLatch(3); ExecutorService executor = Executors.newFixedThreadPool(3); for (int i = 1; i <= 3; i++) { final int taskId = i; executor.submit(() -> { try { System.out.println("任务 " + taskId + " 开始执行..."); Thread.sleep(2000); // 模拟耗时操作 System.out.println("任务 " + taskId + " 执行完成!"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { latch.countDown(); // 任务完成,计数器减1 } }); } System.out.println("主线程等待所有任务完成..."); latch.await(); // 主线程在此等待,直到计数器归零 System.out.println("所有任务已完成,主线程继续执行!"); executor.shutdown(); }} 运行上述代码,你会看到类似如下输出:
主线程等待所有任务完成...任务 1 开始执行...任务 2 开始执行...任务 3 开始执行...任务 2 执行完成!任务 1 执行完成!任务 3 执行完成!所有任务已完成,主线程继续执行! CountDownLatch 是一次性使用的,计数器一旦归零,就不能重置。如果需要重复使用,请考虑 CyclicBarrier。await() 的线程可能会被中断,因此建议处理 InterruptedException。await() 后的逻辑,否则可能导致程序逻辑错误。CountDownLatch 是 Java并发工具 中实现 线程同步 的利器,特别适合“等待多个任务完成”的场景。通过本文的学习,你应该已经掌握了它的基本用法和适用场景。在实际的 多线程编程 中,合理使用 CountDownLatch 可以让你的程序结构更清晰、逻辑更可靠。
赶快动手试试吧!如果你有任何疑问,欢迎在评论区留言交流。
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128610.html