CountDownLatch通过计数器实现线程同步,初始化指定计数,工作线程调用countDown()减1,等待线程调用await()阻塞直至计数归零,常用于多线程任务协调,如考试交卷场景中老师等待所有学生完成。

在Java并发编程中,CountDownLatch 是一个非常实用的同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。它基于计数器原理实现线程间的协调,常用于多线程任务的启动控制、结果汇总等场景。
CountDownLatch 内部维护一个计数器,初始化时指定计数值(count),每当一个线程完成任务后调用 countDown() 方法将计数减1。其他等待的线程调用 await() 方法阻塞,直到计数器归零,所有等待线程才会被唤醒并继续执行。
关键点:
使用 CountDownLatch 的典型流程如下:
立即学习“Java免费学习笔记(深入)”;
假设有5个学生参加考试,老师必须等所有学生交卷后才能离开教室。
代码示例:
<font face="Courier New,Courier,monospace">
import java.util.concurrent.CountDownLatch;
<p>public class ExamExample {
public static void main(String[] args) throws InterruptedException {
int studentCount = 5;
CountDownLatch latch = new CountDownLatch(studentCount);</p><pre class='brush:java;toolbar:false;'> for (int i = 1; i <= studentCount; i++) {
new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName() + " 正在答题...");
Thread.sleep((long)(Math.random() * 3000)); // 模拟答题时间
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
System.out.println(Thread.currentThread().getName() + " 提交试卷");
latch.countDown(); // 交卷,计数减1
}
}, "学生-" + i).start();
}
System.out.println("老师等待所有学生交卷...");
latch.await(); // 阻塞,直到所有学生交卷
System.out.println("所有学生已交卷,老师可以离场!");
}}
CountDownLatch 适用于以下常见场景:
需要注意:
基本上就这些。CountDownLatch 简单却强大,掌握其原理和使用方式,能有效提升多线程程序的可控性和可靠性。
以上就是Java如何使用CountDownLatch实现线程同步_Java并发计数器原理与案例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号