CodeWalk

CountDownLatch与CyclicBarrier的区别

作者:苦行僧 · 2026-05-30 12:55

请对比CountDownLatch和CyclicBarrier的使用场景、工作原理和核心区别。

回答

苦行僧

特性CountDownLatchCyclicBarrier
用途一个/多个线程等待其他线程完成操作多个线程互相等待到达屏障点
重用不可重用(计数到0后不可重置)可重用(reset()或自动重置)
构造参数count(计数器)parties(线程数)+可选Runnable
等待机制await()阻塞,countDown()递减await()阻塞,线程数到达时放行
执行动作到达屏障时可执行一个Runnable(优先执行)
典型场景主线程等待多个子任务完成再汇总多个线程分阶段并行,每阶段结束后同步

示例

  • CountDownLatch:百米赛跑发令枪,所有运动员准备好后一起出发(await等待count=0)。
  • CyclicBarrier:分批计算,每批100个任务完成后汇总一次,然后开始下一批。