问题标签 [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:导致屏障跳闸“y”的“x”个线程完成它们的执行并终止
我有一个 CyclicBarrier,当有“x”个方(线程)等待它时,它会跳闸。在这些“x”线程中,“y”的生命周期非常短,并且在成功完成执行后会很快终止。现在,屏障一直在等待并超时,因为它一直在等待“x”个线程。我该如何解决这个问题?
现在说 task1,调用 write() 5 次,task2 调用 write 500 次。然后 task1 将在遇到障碍 5 次后终止,但 task2 将继续运行。
java - 使用 CyclicBarrier 的 Java 循环线程
我有一个具有这种一般结构的程序:
我的问题是我需要线程的 run() 方法保持循环,直到满足某个条件,但在每次迭代后暂停以让所有线程同步。
我已经尝试将 Runnable 方法附加到屏障,但这最终需要重新创建和重新启动每个线程,这不是一个很好的解决方案。
我也尝试过使用 CyclicBarrier 的 reset() 方法,但这似乎只会导致现有线程出错,即使在所有线程完成后执行也是如此。
我的问题是:
- 是否可以“重置”一个屏障并让所有屏障的线程遵循与第一次调用 await() 之前相同的条件?
-或者我应该使用另一种方法来实现这一目标吗?
提前致谢
java - ExecutorService 与 Runnable 共享 CyclicBarrier
我在使用共享 a 的 n Runnable 类的 Java 并发解决方案中遇到问题CyclicBarrier
,并且Runnable
由 a 处理ExecutorService
,这是代码:
一切从主要开始:
问题是Runnable
没有超过运行中的第一个“迭代” Chief
,所以问题似乎是工人没有超过writerBarrier.await();
,而是如果我初始化了这个:
与workers.size()
, 有效,但似乎不同步...我该如何解决?
java - 何时在 java 多线程中重置 CyclicBarrier
我正在阅读CyclicBarrier
以下链接
http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html。
在示例 1 中,CyclicRaceDemo.java
main 方法中,CyclicBarrier 被重用,无需调用reset方法。
我运行了这个例子,它运行良好。所以,我想知道reset
方法的用途是什么。什么时候应该调用它?还是我们需要调用它?
java - CyclicBarrier 启动执行不同逻辑的并行线程
下面的代码似乎不是并行运行的,而是一个接一个地发出请求,甚至在每个单独的线程上调用 await() 方法。有人可以帮助并行调用这个线程吗?
java - 避免在 CyclicBarrier 上耍花招的想法
我正在运行一些并行处理的测试,并制作了一个程序,给定一个整数矩阵,根据邻居重新计算每个位置的值。
CyclicBarrier
我需要一个矩阵的副本,以便在解决部分问题后不会覆盖这些值并使用 a来合并结果:
每个任务都被分配了矩阵的一部分:我将它逐行分成相等的部分。但是可能会发生分区不准确的情况,因此会有一小块对应于最后一行不会提交到线程池。
示例:如果我有16
行并且n_tasks = 4
没有问题,则所有 4 个都将提交到池中。但如果我有18
,前 16 个将被提交,而不是最后两个。
因此,如果发生这种情况,我将强制提交。好吧,我实际上并没有提交,因为我使用的是这样创建的固定线程池ExecutorService e = Executors.newFixedThreadPool(n_tasks)
。由于池中的所有槽都被占用并且线程被屏障阻塞(mybarrier.await()
在方法中调用run
)我无法将它提交到池中,所以我只使用了Thread.start()
.
让我们进入正题。由于我需要考虑CyclicBarrier
该块剩余的可能性,因此必须将参与方的数量增加 1。
但如果这种情况没有发生,我将是一个不足触发障碍的一方。
我的解决方案是什么?:
cyclic_barrier.await()
使用绝招强行提升结界的时候,感觉像是在作弊。
有没有其他方法可以解决这个问题,所以我不必做我正在做的事情?
java - 工作线程上的 CyclicBarrier
我有一个函数可以将数组拆分成更小的部分。
然后在单独的线程中评估每个部分。
结果被填充到一个通用列表中。
我本来希望 sortandkeep 递归等待障碍被打破。
当所有工作线程都调用了 await 时,就会发生这种情况。
然而,事实并非如此。
主线程不断递归 - 无论工作线程的状态如何。这是怎么回事?
java - 如何在 servlet 中使用 CyclicBarrier?
您好,这是我关于 java 线程的第一篇文章...我阅读了JavaWorld 线程文章非常有用的文章,并尝试使用线程来加速 servlet 的处理。
在我的 web 应用程序中,我有一个 servlet 需要花费大量时间来处理..实际上主要有 3 种方法很长,我想使用 CyclicBarrier 并行执行 3 种方法...但是很困惑如何在 servlet 中使用它.. .
这是我尝试过的一些演示代码..
输出...
预期输出..
java - java中的循环障碍
我有一个需要由三方填充的列表(线程,可以说)。我正在使用循环障碍来实现此功能。一切正常,除了我无法在不引起强制睡眠的情况下使用结果列表。下面是代码:
下面是我的 CyclicBrrierTest 课程:
因此,如果我在没有任何延迟的情况下运行此代码,则我的 main 方法中的 print 语句将我的列表长度设为零,但是在给予适当的睡眠后,它会给我预期的输出。我想在没有任何延迟的情况下实现相同的目标。任何帮助,将不胜感激。提前致谢。
java - CyclicBarrier 误解
我尝试从其中一个教程中使用 CyclicBarrier 运行示例:当空打印机的队列为 3 时,服务人员应填充空打印机。但是当我运行代码时,似乎打印机在队列中填充了 2、3 或 4 个空打印机:
打印机 1 为空
打印机 12 为空
打印机 14 为空
打印机 13 为空
填充 [Printer1、Printer12、Printer14、Printer13]
打印机 2 为空
打印机 7 为空
填充 [打印机 2、打印机 7]
那么这个例子是错误的还是我对 CyclicBarrier 的理解?我认为队列应该正好是 3 个元素的大小。我应该在代码中添加什么来解决这个问题?提前致谢。
代码: