CountDownLatch与CyclicBarrier的区别
请对比CountDownLatch和CyclicBarrier的使用场景、工作原理和核心区别。
回答
苦行僧
| 特性 | CountDownLatch | CyclicBarrier |
|---|---|---|
| 用途 | 一个/多个线程等待其他线程完成操作 | 多个线程互相等待到达屏障点 |
| 重用 | 不可重用(计数到0后不可重置) | 可重用(reset()或自动重置) |
| 构造参数 | count(计数器) | parties(线程数)+可选Runnable |
| 等待机制 | await()阻塞,countDown()递减 | await()阻塞,线程数到达时放行 |
| 执行动作 | 无 | 到达屏障时可执行一个Runnable(优先执行) |
| 典型场景 | 主线程等待多个子任务完成再汇总 | 多个线程分阶段并行,每阶段结束后同步 |
示例:
- CountDownLatch:百米赛跑发令枪,所有运动员准备好后一起出发(await等待count=0)。
- CyclicBarrier:分批计算,每批100个任务完成后汇总一次,然后开始下一批。