【countdownlatch和cyclicbarrier原理】面试官最爱问的多线程协调工具
当面试官甩出“CountDownLatch和CyclicBarrier有什么区别?”这个问题时,千万别慌!这俩兄弟都是Java并发包里解决多线程协调的王牌工具,核心原理搞懂了,回答起来绝对游刃有余。
🔥 必备福利:2025年最新Java面试高频题库整理好了!
👉 点击获取:Java面试宝典(含并发编程专题)
提取码: 9b3g 抓紧保存,备战金三银四!
🧩 一、CountDownLatch:一锤定音的倒计时门栓
想象一个场景:主线程要等5个下载线程全部完成任务才能汇总结果。CountDownLatch就是干这个的——它是个一次性使用的计数器。
- 核心原理:
- 初始化时设定一个计数值(比如
new CountDownLatch(5))。 - 工作线程完成任务后,调用
countDown(),计数减1。 - 主线程调用
await()阻塞等待,直到计数器减到0,大门“哐当”打开,主线程继续执行。 - 关键点:
- 计数器不可重置,用完就废。
await()的线程是被动等待,控制权在调用countDown()的工作线程手里。- 像体育比赛的发令枪,枪响(
count=0),所有运动员(await的线程)才能开跑。
- 初始化时设定一个计数值(比如

- 面试场景: “主线程等待多个前置任务完成”、“并行计算,汇总结果”这类问题,CountDownLatch都是首选答案。
🔁 二、CyclicBarrier:可循环使用的集结屏障
再来个场景:一组士兵(线程)要分批到达指定集合点,全部到齐后才能一起出发执行下一个任务,而且这个集结过程要重复多次(比如突破多道防线)。这就是CyclicBarrier的战场——它是个可重复使用的同步点。
- 核心原理:
- 初始化时设定参与线程数(比如
new CyclicBarrier(5))和一个可选的Runnable任务(当所有线程到达时,由最后到达的线程执行)。 - 每个线程完成任务后调用
await()等待。 - 当调用
await()的线程数量达到预设值,所有被阻塞在await()的线程同时被唤醒释放,继续执行,并且屏障自动重置,迎接下一轮集结。 - 关键点:
- 可循环使用 (
Cyclic),一轮结束后自动/手动重置计数器,能反复用。 - 所有调用
await()的线程地位平等,都在互相等待。当最后一个线程调用await()时,它负责执行屏障点的那个可选任务(如果有),然后唤醒大家。 - 像旅游团的集合点,导游(
屏障)要等所有游客(线程)都到了(await),才能一起前往下一个景点,并且这个集合点(屏障)在每次出发后都重置,可以再次使用。
- 可循环使用 (
- 初始化时设定参与线程数(比如

- 面试场景: 当问题涉及“多线程分阶段协作”、“迭代计算,每轮所有线程都完成后再进入下一轮”,CyclicBarrier就是标准答案。
⚖️ 三、CountDownLatch vs CyclicBarrier:核心差异点
面试官99%会追问它们的区别!抓住这几个核心:
- 计数器重置:
- CountDownLatch:不能重置! 计数器减到0就结束了,是一次性用品。想再用?new一个新的吧。
- CyclicBarrier:可以重置! 计数器减到0后自动重置(或调用
reset()手动重置),可重复使用多次。
- 等待角色:
- CountDownLatch: 通常是一个或多个线程(
await)等待事件发生(其他线程完成countDown)。 - CyclicBarrier: 是所有线程(
await)互相等待彼此,大家地位平等,共同到达一个点。
- CountDownLatch: 通常是一个或多个线程(
- 动作触发:
- CountDownLatch: 计数器到0,唤醒所有等待线程,没有指定动作。
- CyclicBarrier: 计数器到0,先执行一个可选的屏障动作(由最后一个到达屏障的线程执行),再唤醒所有等待线程。
- 异常处理:
- CountDownLatch: 工作线程
countDown()不受其他线程影响。 - CyclicBarrier: 如果一个线程在
await()时被中断或超时,或者屏障点任务抛异常,所有等待线程都会收到BrokenBarrierException,屏障损坏。需要reset()或新建。
- CountDownLatch: 工作线程
简单记:
- CountDownLatch = 倒计时炸弹(炸了就没了)-> 主等次 (主线程等次要线程完成)
- CyclicBarrier = 循环栅栏(可重复开关)-> 线程互相等
💰 搞定面试,还能省一笔!
多线程是Java面试必考高地!把CountDownLatch和CyclicBarrier的原理和区别吃透,面试官这一关基本稳了。如果你想系统刷遍大厂最新Java面试真题,掌握更多像这样的并发编程核心考点,强烈推荐使用面试鸭会员题库。
🎁 好消息!通过面试鸭返利网 (mianshiyafanli.com) 购买面试鸭会员,可享独家返利25元! 海量真题+详细解析+持续更新,投资自己最划算,还能省一杯奶茶钱!

(扫码或访问 面试鸭返利网 mianshiyafanli.com 了解返利详情)
赶紧把文首的Java面试宝典存好,结合面试鸭题库查漏补缺,拿下心仪Offer!


