- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Java 中的 CyclicBarrier
/CountDownLatch
和 join
有什么区别? CyclicBarrier
和 CountDownLatch
有什么优势?在我看来,只需使用 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/
运行以下代码时,2个启动线程将被CyclicBarrier *对象锁定,并无限等待第三个线程解锁 import java.util.concurrent.BrokenBarrierException;
介绍 CyclicBarrier允许一组线程在到达某个栅栏点(common barrier point)互相等待,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行。 就比如说我
一 点睛 1 定义 CyclicBarrier 可以用于解决多个线程之间的相互等待问题。CyclicBarrier 的使用场景是,每个线程在执行时,都会碰到屏障,该屏障会拦截所有线程的执行(通过 aw
我正在尝试使用 CyclicBarrier 模拟铁人三项比赛,但它没有按预期工作,我也不知道为什么。 比赛的每一部分都要等到所有跑者都完成上一部分后,但似乎永远在等待。 这是第一阶段的代码片段: cl
下面的代码似乎不是并行运行的,而是在每个单独的线程上调用 wait() 方法的情况下,在另一个请求之后发出一个请求。有人可以帮助并行调用该线程吗? public class XYZ { priv
我正在实现一个并行算法。如果没有 CyclicBarrier,我可以用一半的顺序时间完成工作。使用 CyclicBarrier 会使时间延长 100 倍。我将包括我的线程调用和线程函数,以便您可以看到
在这种情况下,CyclicBarrier 是否最适合。 我想在 Stages 中并行运行 n 个线程(在 Stages 等待直到所有线程完成该 Stage)。 public class
我想使用 CyclicBarrier 对象作为静态成员,我有多个线程正在运行,它将修改 CyclicBarrier 对象状态,这样做安全吗? 最佳答案 CyclicBarrier 的全部意义在于同步多
我正在尝试通过在启动(等待)几个方(线程)的过程中重置 cyclicbarrier 来测试 BrokenBarrierException,请在下面找到相同的示例代码。 用户类: public clas
我有一个使用 CyclicBarrier 的方法,如下所示: public void getMessage(Message obj){ CyclicBarrier barrier = new
我正在寻找 CyclicBarrier我写了这个演示。 import java.util.concurrent.BrokenBarrierException; import java.util.con
当在 Java 中使用 CyclicBarrier 同步线程时,它们是否同步非 volatile 变量? int a = 0; int b = 0; CyclicBarrier barrier = n
我有一个函数可以将数组分割成更小的部分。 然后在单独的线程中评估每个部分。 结果被填充到一个公共(public)列表中。 private void sortandkeep(int[] arr){
上一篇咱讲了 CountDownLatch 可以解决多个线程同步的问题,相比于 join 来说它的应用范围更广,不仅可以应用在线程上,还可以应用在线程池上。然而 CountDownLatch 却
栅栏类似闭锁,但是它们是有区别的. 1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的
我在jdk1.8中分析了代码,但在其他jdk版本中可能有同样的问题 让我们假设以下代码中的partys = 3 CyclicBarrier cb = new CyclicBarrier(3); par
我正在努力实现以下目标: 获取用户的两个输入( length 和 amountOfCycles ) 创建一个包含 length 的数组线程数量。每个包含一个整数 value在 [1, 100] 范围内
对于我的家庭作业,我必须制作一个由几个国王在棋盘上移动的游戏。每个国王必须在自己的线程中从其独特的起始位置移动到独特的结束位置。在采取行动之前,国王必须 hibernate 长达 10 毫秒(有点随机
我知道下面的代码可能看起来很粗俗,但我对这些东西还是陌生的,只是为了让它工作而尝试了一切...... 问题:即使我正在使用(可能以错误的方式)一个 CyclicBarrier,一个 - 并且似乎总是相
在 CyclicBarrier.reset javadocs,以下提到。 Note that resets after a breakage has occurred for other reason
我是一名优秀的程序员,十分优秀!