在Java多线程编程中,我们经常需要协调多个线程之间的执行顺序。比如:主线程需要等待多个子任务全部完成后再继续执行。这时,Java计数锁存器(CountDownLatch)就派上用场了!
CountDownLatch 是 Java 并发包(java.util.concurrent)中的一个同步辅助类。它允许一个或多个线程等待,直到其他线程完成一组操作。
你可以把它想象成一个“倒计时门闩”:初始设定一个计数值(比如5),每完成一个任务就减1,当计数减到0时,所有等待的线程就会被释放,继续执行后续代码。
CountDownLatch(int count):构造函数,设置初始计数值。await():调用此方法的线程会被阻塞,直到计数器变为0。countDown():将计数器减1。通常由完成任务的线程调用。假设你是一个项目经理,有3个工人(线程)在干活,你必须等他们都干完才能下班。用 Java计数锁存器 实现如下:
import java.util.concurrent.CountDownLatch;public class WorkerExample { public static void main(String[] args) throws InterruptedException { // 创建一个计数为3的CountDownLatch CountDownLatch latch = new CountDownLatch(3); // 启动3个工作线程 for (int i = 1; i <= 3; i++) { new Thread(() -> { try { System.out.println(Thread.currentThread().getName() + " 开始工作..."); Thread.sleep(2000); // 模拟工作耗时 System.out.println(Thread.currentThread().getName() + " 完成工作!"); } catch (InterruptedException e) { e.printStackTrace(); } finally { latch.countDown(); // 工作完成,计数减1 } }, "Worker-" + i).start(); } // 主线程等待所有工人完成 System.out.println("项目经理等待所有工人完工..."); latch.await(); // 阻塞直到计数为0 System.out.println("所有工作完成,项目经理下班!"); }} 运行结果大致如下:
项目经理等待所有工人完工...Worker-1 开始工作...Worker-2 开始工作...Worker-3 开始工作...Worker-1 完成工作!Worker-3 完成工作!Worker-2 完成工作!所有工作完成,项目经理下班!
CyclicBarrier。await() 可以被中断,会抛出 InterruptedException。await(),它们都会在计数归零后继续执行。Java并发工具 CountDownLatch 常用于以下场景:
CountDownLatch 是一个强大而简单的 多线程同步 工具。通过它,我们可以轻松实现“等待N个事件完成后再继续”的逻辑。对于初学者来说,掌握它是迈向高级并发编程的重要一步。
记住:合理使用 CountDownLatch教程 中介绍的方法,能让你的多线程程序更清晰、更可靠!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025128683.html