面试鸭返利网(mianshiyafanli.com)专注Java面试题库与求职攻略,提供2025最新面试宝典下载,包含CountDownLatch、多线程等高频考点解析。通过本站购买面试鸭会员可享25元返利,助你高效备战金三银四。获取百度云资源「Java面试资料包」含并发编程、Spring全家桶等实战案例,提升通过率!程序员求职必备平台,省钱又省心。
大家好!今天咱们聊聊面试中经常被问到的并发工具——CountDownLatch。如果你正在准备Java面试,或者实际项目中需要协调多线程任务,这篇内容一定能帮到你!
简单说,CountDownLatch是Java并发包里的一个"倒计时门闩"。它允许一个或多个线程等待其他线程完成操作后再继续执行。你可以把它想象成运动会的起跑线:所有运动员(线程)准备好后,裁判(主线程)才发令开跑!
核心就两点:
new CountDownLatch(3)
表示需要倒计时3次。await()
的线程会阻塞等待countDown()
减1手把手准备的2025年Java面试宝典 👇
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码: 9b3g
面试时被问到"说说CountDownLatch应用场景",你可以举这些例子:
场景1:多任务初始化
比如系统启动时需要加载缓存、连接数据库、初始化配置三个模块。主线程用CountDownLatch
等待所有模块就绪:
CountDownLatch latch = new CountDownLatch(3);
// 线程1初始化缓存 → latch.countDown()
// 线程2连接DB → latch.countDown()
// 线程3加载配置 → latch.countDown()
latch.await(); // 阻塞直到三个任务完成
System.out.println("系统启动完毕!");
场景2:并行计算汇总
统计10个文件的行数,主线程汇总结果:
List<Future> results = new ArrayList<>();
CountDownLatch latch = new CountDownLatch(10);
for (File file : files) {
executor.submit(() -> {
int lines = countFileLines(file);
results.add(lines);
latch.countDown(); // 每个文件统计完减1
});
}
latch.await(); // 等10个文件全处理完
int totalLines = results.sum();
关键点:
countDown()
的线程不会被阻塞被问到"CountDownLatch和CyclicBarrier区别?"时,记住这个表:
| 特性 | CountDownLatch | CyclicBarrier |
|--------------------|------------------------|------------------------|
| 重置计数器 | ❌ 不可重置 | ✅ 可循环使用 |
| 阻塞线程 | 调用await()
的线程 | 所有线程互相等待 |
| 应用场景 | 主等子、子等子 | 多线程分阶段同步 |
举个实际例子🌰:
公司团建约车:
- CountDownLatch:司机等10个员工全上车(主线程等子线程)
- CyclicBarrier:10个员工互相等,都到停车场才一起出发(线程间互等)
如果你正在刷Java面试题,强烈推荐用面试鸭的题库系统。悄悄说👉 通过面试鸭返利网(mianshiyafanli.com)购买会员可返25元,用我的链接能省一杯奶茶钱!
希望这篇帮你搞懂CountDownLatch!遇到并发协同问题,记得还有这个利器~ 需要面试资料再提醒下👇
📁 2025 Java面试宝典
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码: 9b3g
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)
面试鸭小程序码
美团大额优惠券,给自己加个鸡腿吧!
今日有支付宝大红包赶快领,手慢无
支付宝扫码领取1-8元无门槛红包