CountDownLatch 和 CyclicBarrier 的区别?

发布于

一、CountDownLatch

  • 一个或多个线程等待其他线程完成后再继续。
  • 用计数器实现,countDown() 减 1,await() 等待归零。
  • 一次性,归零后不能重置。

场景:主线程等待多个子任务完成。

二、CyclicBarrier

  • 一组线程互相等待,全部到达屏障点后一起继续。
  • 可循环使用,重置后可再次等待。
  • 可传入 barrierAction,所有线程到达后执行。

场景:多线程计算后合并结果,可反复使用。

三、核心区别

维度 CountDownLatch CyclicBarrier
等待方 主线程等子线程 子线程互相等
复用 一次性 可循环
回调 无 支持 barrierAction