计数器:
CountDownLatch: 计数器是一次性的,当所有线程都调用 countDown() 方法后,计数器减到 0,主线程才会继续执行。之后,CountDownLatch 无法重置或修改计数器。
CyclicBarrier: 计数器是可重置的,每次执行完 await() 方法后,主线程都会继续执行,然后可以通过 reset() 方法重置计数器,使其恢复到初始值,以便再次使用。
线程数量:
CountDownLatch: 可以等待多个线程完成,但不需要指定具体的线程数量。
CyclicBarrier: 必须指定等待的线程数量,即构造函数的参数。
应用场景:
CountDownLatch: 主要用于等待多个线程完成同一个任务,例如,多个线程分别计算数据,最后汇总结果。
CyclicBarrier: 主要用于等待多个线程到达同一个同步点,例如,多个线程分别执行不同的任务,最后再合并结果。
阻塞时间:
CountDownLatch: 直到计数器减到 0 才继续,主线程的阻塞时间取决于其他线程执行 countDown() 方法的顺序。
CyclicBarrier: 直到所有线程都到达同步点才继续,主线程的阻塞时间取决于所有线程执行 await() 方法的顺序。
本文作者:whitebear
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!