CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下~

它们的行为有一定相似度,区别主要在于

  • CountDownLatch 是不可以重置的,所以无法重用,CyclicBarrier 没 有这种限制,可以重用。
  • CountDownLatch 的 基 本 操 作 组 合 是 countDown/await, 调 用 await 的线程阻塞等待 countDown 足够的次数,不管你是在一个线
    程还是多个线程里 countDown,只要次数足够即可。 CyclicBarrier 的基本操作组合就是 await,当所有的伙伴都调用了 await,才会继续 进行任务,并自动进行重置。
  • CountDownLatch 目的是让一个线程等待其他 N 个线程达到某个条 件后,自己再去做某个事(通过 CyclicBarrier 的第二个构造方法 public CyclicBarrier(int parties, Runnable barrierAction),在新线 程里做事可以达到同样的效果)。而 CyclicBarrier 的目的是让 N 多 线程互相等待直到所有的都达到某个状态,然后这 N 个线程再继续执 行各自后续(通过 CountDownLatch 在某些场合也能完成类似的效
    果)。

回复

共1条回复 我来回复
  • 迷失技术de小猪
    迷失技术de小猪
    稍等伙伴们,思考简介中~
    评论

    它们的行为有一定相似度,区别主要在于

    • CountDownLatch 是不可以重置的,所以无法重用,CyclicBarrier 没 有这种限制,可以重用。
    • CountDownLatch 的 基 本 操 作 组 合 是 countDown/await, 调 用 await 的线程阻塞等待 countDown 足够的次数,不管你是在一个线
      程还是多个线程里 countDown,只要次数足够即可。 CyclicBarrier 的基本操作组合就是 await,当所有的伙伴都调用了 await,才会继续 进行任务,并自动进行重置。
    • CountDownLatch 目的是让一个线程等待其他 N 个线程达到某个条 件后,自己再去做某个事(通过 CyclicBarrier 的第二个构造方法 public CyclicBarrier(int parties, Runnable barrierAction),在新线 程里做事可以达到同样的效果)。而 CyclicBarrier 的目的是让 N 多 线程互相等待直到所有的都达到某个状态,然后这 N 个线程再继续执 行各自后续(通过 CountDownLatch 在某些场合也能完成类似的效
      果)。
    1个月前 0条评论
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载