问题标签 [cyclicbarrier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 线程对象不同步
所以我写了这个程序来运行这个机器人类的多个线程,使用 cyclicbarrier 来同步线程。由于我对循环障碍知之甚少,我认为它会自动同步我的线程,但似乎不是。我需要做什么才能让我的机器人线程根据我的进度整数值进行同步?
公共类控制器{
java - 使用循环屏障不会等到所有线程都完成
这是我想要做的。我有许多线程在它们继续之前都应该在一个共同点等待,所以明显的解决方案是使用CyclicBarrier
. 但我还想计算线程执行所花费的总时间。我在类中定义了以下实用程序方法ConcurrentExecutionActionTimer
。
然后我这样称呼它:
这Worker
是假设我的线程做了一些工作。例如:
因为我想打印所花费的时间,所以我必须使用CountDownLatch
它来确保在所有线程完成之前控件不会返回到 main。我们还有其他方法来确保相同的功能吗?
multithreading - 运行线程组
假设我在 java 中有几组线程,我想以这种方式实现:在每个时间点,只有一组线程可以运行,其他线程应该等待轮到它们(循环)。
你会如何建议这样做?
java - 如何使用 CountDownlatch 使线程按顺序工作?
我正在学习如何在 java 中使用 countdownLatch,并在代码中创建了一个简单的示例,如下所示。
我对这种机制的了解是,它只是一种强制只有一个线程等待其他线程直到他们完成工作,然后等待的线程将在其他线程完成时启动它的工作.
我的问题是,如果我有 4 个线程“t1、t2、t3 和 t4”,它们应该按照说明的顺序开始,并且每个线程应该在前一个/前一个线程完成时开始。换句话说,t2 应该等待 t1 并在 t1 结束时开始,t3 应该等待 t2 并在 t2 结束时开始,t4 应该等待 t3 并在 t3 结束时开始。
1-如何使用 CountDownLatch 和循环障碍来做到这一点?
2-传递给CountDownLatch类的构造函数的countDown参数应该代表等待的线程数吗?
代码:
}
java - 当我在 CyclicBarrier 回调中调用 join 时应用程序挂起
我在启动线程的地方进行了以下方法测试:
CallBack 线程如下所示:
当我运行应用程序时,我看到以下输出:
和应用程序挂起。
我不明白为什么。
如果将连接逻辑替换为 main 方法 - 所有商品都很好。
你能解释一下这个区别吗?
恕我直言,它应该工作相同。
java - 我的代码线程不安全吗?
我编写了代码来理解 CyclicBarrier。
我的应用程序模拟选举。每一轮选出票数较少的候选人,该候选人从竞选中被淘汰出局。
来源:
样本输出:
如您所见,我的最后一个汇总器调用输出如下:
我有 10000 个选民,但 4961 + 5036 = 9997。
哪个输了3票?
附言
我尝试了带锁的解决方案:
但我明白了
第 88 行: cyclicBarrier.await();
java - 处理与循环障碍相关的异常的更好方法
我正在尝试将一些商业案例映射到循环障碍的使用。假设我们正在进行促销优惠,只有 3 位客户可以获得促销优惠。其余的将无法获得报价。
为了映射这个场景,我使用了 Cyclic Barrier。即使代码正常工作,我也不确定如何处理某些客户无法获得报价的情况。现在,我尝试使用具有超时值的 await() API,以便我可以捕获TimeoutException并让客户知道他无法使用促销优惠。这导致了另一个等待线程的BarrierBrokenException 。
我想知道,我们如何才能优雅地处理这些场景,以便选定的客户获得促销优惠,而那些无法遵循不同代码路径的客户。
我的代码 -
其中一次运行的输出 -
- 线程 1 试图获得促销优惠!
- 线程 4 试图获得促销优惠!
- 主线程已完成
- 线程 3 试图获得促销优惠!
- 线程 2 试图获得促销优惠!
- 线程 5 试图获得促销优惠!
- 障碍达到前三名,他们将获得促销优惠!
- 线程 2 获得促销优惠!
- Thread 1 收到促销优惠!
- Thread 5 收到促销优惠!
- 由于超时异常,线程 3 无法获得促销优惠
- 由于屏障异常,线程 4 无法获得促销优惠
java - 如何使用循环屏障杀死线程
有没有办法杀死所有等待循环屏障完成的线程。在我的场景中,我有 3 个线程,如果在 A 点相遇,则只能继续,否则进程应该被终止。我已经使用循环屏障来检查所有三个线程是否在 A 点相遇,如果是,则继续,但如果即使 1 个线程失败,那么我如何使用这个屏障杀死所有线程。线程只是在等待。我不想让他们现在等。
java - 使用与 CyclicBarrier 连接的协调方法的问题
我试图了解更多关于在协调方法场景中使用 join() 和 CyclicBarrier - 发送和接收。基本代码来自以前的海报,我对其进行了修改以运行某些循环帐户(例如 10 次)。代码如下:
但是,我遇到了一个我无法解决的结果,并且与 await() 的逻辑几乎没有混淆。虽然结果似乎符合我的预期,即 SEND 和 ACK 交替 10 次。它实际上在 SEND 上运行了额外的时间,显然在第 10 次 -ACK 运行时将状态 Sender.stop 更改为 true 状态并没有“停止”Send-run() 中的 while 循环。此外,线程在 10 次(或 11 次)之后没有结束,因此我从未进入 main() 中打印出的“It is over..”。似乎该进程挂在某个地方。
javascript - 是否可以允许在javascript的主线程中等待
我目前正在与 Web Workers 合作,出于某些测试目的,如果可以在主线程中等待直到工作人员完成他们正在做的事情,那就太好了。所以:
主线程->启动工人
主线程->等待工人完成
工人->做一些工作
工人完成。
主线程-> 做一些事情。
我意识到这样做的最正确方法是在主线程中使用回调,每当工作人员完成时调用该回调,但出于实际原因这将不起作用。我在 Java 中制作了类似于 CyclicBarrier 的东西,但是每当我在主线程中调用 barrier.enter() 时,我当然会得到一个错误。因此,我想知道是否有任何设置或类似的设置可以让我暂时阻止主线程。我正在使用 Node btw 运行我的程序。
这纯粹是为了测试目的,我当然不会在生产环境中使用它!