gpt4 book ai didi

java - CyclicBarrier/CountDownLatch 和 Java 中的 join 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 22:49:42 26 4
gpt4 key购买 nike

Java 中的 CyclicBarrier/CountDownLatchjoin 有什么区别? CyclicBarrierCountDownLatch 有什么优势?在我看来,只需使用 join 我们就可以等待线程完成其执行。

最佳答案

是的,“t.join()”使当前线程等待“t”线程完成,当一个线程正在等待其他线程时,我们可以准备一个线程链。但有时 CountDownLatch/CyclicBarrier 更方便。

首先,CountDownLatch/CyclicBarrier 不要求所有工作线程都应该完成。线程可以在应用程序运行时一直运行。他们只是让我们说“一些工作”已经完成了很多次。此外,如果我们有 N 个作业和 M 个线程,并且 N > M,一些线程可以多次执行一个作业,直到它们的共同屏障 N 为 0。这个例子表明,CountDownLatch/CyclicBarrier 是非常有用的原语,可以在 M 个线程之间共享 N 个任务。

此外,要使用 join(),每个线程都应该有一个对另一个线程的引用以调用 join()。它使您的代码有点脏,尤其是当您有 2 个以上的工作线程时。共享一个 CountDownLatch/CyclicBarrier 实例看起来更清晰。

CyclicBarrier 和 CountDownLatch 之间的主要区别在于 CyclicBarrier 是可重用的,而 CountDownLatch 不是。您可以通过调用 reset() 方法重用 CyclicBarrier,该方法将屏障重置为其初始状态。

CountDownLatch 适用于应用程序/模块启动时间等一次性事件,而 CyclicBarrier 可用于重复事件,例如每次输入数据更改时同时(重新)计算。

您可以在以下位置找到一些很好的示例:

http://javarevisited.blogspot.sg/2012/07/countdownlatch-example-in-java.html http://javarevisited.blogspot.ru/2012/07/cyclicbarrier-example-java-5-concurrency-tutorial.html

关于java - CyclicBarrier/CountDownLatch 和 Java 中的 join 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21808814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com