327 字
2 分钟
CyclicBarrier 和 CountDownLatch 有什么区别?

CyclicBarrier 和 CountDownLatch 有什么区别?#

两者最核心的区别[18]:

  • CountDownLatch 是一次性的,而 CyclicBarrier 则可以多次设置屏障,实现重复利用;
  • CountDownLatch 中的各个子线程不可以等待其他线程,只能完成自己的任务;而 CyclicBarrier 中的各个线程可以等待其他线程

它们区别用一个表格整理:

CyclicBarrierCountDownLatch
CyclicBarrier 是可重用的,其中的线程会等待所有的线程完成任务。届时,屏障将被拆除,并可以选择性地做一些特定的动作。CountDownLatch 是一次性的,不同的线程在同一个计数器上工作,直到计数器为 0.
CyclicBarrier 面向的是线程数CountDownLatch 面向的是任务数
在使用 CyclicBarrier 时,你必须在构造中指定参与协作的线程数,这些线程必须调用 await()方法使用 CountDownLatch 时,则必须要指定任务数,至于这些任务由哪些线程完成无关紧要
CyclicBarrier 可以在所有的线程释放后重新使用CountDownLatch 在计数器为 0 时不能再使用
在 CyclicBarrier 中,如果某个线程遇到了中断、超时等问题时,则处于 await 的线程都会出现问题在 CountDownLatch 中,如果某个线程出现问题,其他线程不受影响
CyclicBarrier 和 CountDownLatch 有什么区别?
作者
强人自传
发布于
2023-11-01
许可协议
CC BY-NC-SA 4.0