CountDownLatch 和 CyclicBarrier 的区别?
发布于
一、CountDownLatch
- 一个或多个线程等待其他线程完成后再继续。
- 用计数器实现,countDown() 减 1,await() 等待归零。
- 一次性,归零后不能重置。
场景:主线程等待多个子任务完成。
二、CyclicBarrier
- 一组线程互相等待,全部到达屏障点后一起继续。
- 可循环使用,重置后可再次等待。
- 可传入 barrierAction,所有线程到达后执行。
场景:多线程计算后合并结果,可反复使用。
三、核心区别
| 维度 | CountDownLatch | CyclicBarrier |
|---|---|---|
| 等待方 | 主线程等子线程 | 子线程互相等 |
| 复用 | 一次性 | 可循环 |
| 回调 | 无 | 支持 barrierAction |