CyclicBarrier和CountDownLatch有什么区别?

CyclicBarrier和CountDownLatch有什么区别?
两者最核心的区别:
- CountDownLatch是一次性的,而CyclicBarrier则可以多次设置屏障,实现重复利用;
- CountDownLatch中的各个子线程不可以等待其他线程,只能完成自己的任务;而CyclicBarrier中的各个线程可以等待其他线程
它们区别用一个表格整理:
CyclicBarrier | CountDownLatch |
---|---|
CyclicBarrier是可重用的,其中的线程会等待所有的线程完成任务。届时,屏障将被拆除,并可以选择性地做一些特定的动作。 | CountDownLatch是一次性的,不同的线程在同一个计数器上工作,直到计数器为0. |
CyclicBarrier面向的是线程数 | CountDownLatch面向的是任务数 |
在使用CyclicBarrier时,你必须在构造中指定参与协作的线程数,这些线程必须调用await()方法 | 使用CountDownLatch时,则必须要指定任务数,至于这些任务由哪些线程完成无关紧要 |
CyclicBarrier可以在所有的线程释放后重新使用 | CountDownLatch在计数器为0时不能再使用 |
在CyclicBarrier中,如果某个线程遇到了中断、超时等问题时,则处于await的线程都会出现问题 | 在CountDownLatch中,如果某个线程出现问题,其他线程不受影响 |