Java多线程中CountDownLatch与CyclicBarrier的区别

49 阅读2分钟

Java中CountDownLatch和CyclicBarrier的区别
CyclicBarrier和CountDownLatch都是用来实现一个线程等待一个或多个线程完成工作后再开始处理的场景,但Java中的CountDownLatchCyclicBarrier 有一个区别,把它们分开了,那就是。一旦计数达到零并且锁存器被打开,你就不能重复使用同一个CountDownLatch 实例,另一方面,CyclicBarrier 可以通过重置Barrier来重复使用,一旦障碍被打破。

CountDownLatch的一个有用的特性 是,它不要求调用 countDown的 线程 在继续进行之前等待计数为零,它只是阻止任何线程继续进行等待,直到所有线程都能通过。

CyclicBarrier 支持一个可选的 Runnable 命令,该命令在每个障碍点运行一次,在聚会的最后一个线程到达后,但在任何线程被释放前。这个屏障动作对于在任何一方继续之前更新共享状态很有用。

CyclicBarrier 对失败的同步尝试使用了快速失败的全或无的破坏模型。如果一个线程因为中断、失败或超时而过早地离开屏障点,所有其他线程,甚至那些尚未从之前的 await()中恢复的线程 , 也会通过 BrokenBarrierException ( 如果他们也在差不多的时间被中断,则为InterruptedException ) 而异常离开 。

这张图也很好地解释了 Java并发中CountDownLatch和CyclicBarrier的区别

Difference between CountDownLatch and CyclicBarrier in Java

以上就是关于Java中CountDownLatch和CyclicBarrier的区别 的全部内容。正如我所说,关键的区别是你可以重复使用CyclicBarrier,但CountDownLatch一旦倒数到零就不能重复使用。

这就是为什么CyclicBarrier经常被用于重复的任务,而CountDownLatch则被用于一次性的任务,比如在开始接受客户端连接之前加载初始缓存。

best course to learn Java Concurrency in Practice.

感谢你到目前为止阅读这篇文章。如果你觉得我对CylicBarrier和CountDownLatch之间的区别的解释很有用,那么请与你的朋友和同事分享它们。如果你有任何问题或反馈,那么请给我留言。