我正在阅读CyclicBarrier
以下链接 http://java-latte.blogspot.in/2013/10/cyclicbarrier-
in-java-concurrency.html
。
在示例1中,CyclicRaceDemo.java
主要方法CyclicBarrier被重用,而没有调用 reset 方法。
我运行了示例,它运行良好。因此,我想知道reset
方法的用途是什么。什么时候应该叫它?还是我们完全需要调用它?
A
CyclicBarrier
是循环的,因为它可以重用而无需复位。从Javadoc
同步帮助,允许一组线程互相等待以到达一个公共的障碍点。CyclicBarriers在涉及固定大小的线程方的程序中很有用,该线程方有时必须互相等待。该屏障称为
循环 屏障,因为它可以在释放等待线程之后重新使用。
因此,在正常使用中,一旦收集了所有线程并且打破了障碍,它就会重置并可以再次使用。
从Javadoc开始reset()
将屏障重置为其初始状态。如果任何一方当前正在障碍处等待,他们将返回
BrokenBarrierException
。请注意,由于其他原因造成破损后的复位操作可能会很复杂。线程需要以其他某种方式重新同步,然后选择一种执行重置。相反,最好为以后的使用创建一个新的屏障。
因此,reset
导致任何当前正在等待的线程抛出a BrokenBarrierException
并立即唤醒。reset
当您想“突破”障碍时使用。
还要注意警告-一旦线程被强制唤醒,再次同步它们是棘手的。
TL; DR :reset()
在通常情况下,您永远不需要使用。
问题内容: 我写一个简单的应用程序,它涉及三个线程: ,和。 是 生成* 并馈给的生成器类。 * 消耗了 计算平均值。我的号码已经使用该饲料用。用途吃起来。 问题是:: 如果平均值超过中的1E5 ,我想表示停止产生数字。我有一个在需要被打开。我该如何实现? PS:该代码将永久运行,而无需在控制台上打印任何内容,我至今仍未弄清原因!! 问题答案: 您可以使用并将它传递给两个线程,原子类型是可访问的,
BilledLines=Integer.ParseInt(args[7]); Array=TaxCalc.Calculation(输入,y,BilledLines,); 返回数组; } taxouput函数是OSB中的多线程函数。现在,我想调用setup()和 cleanup(),以便setup()只对第一个线程调用,而 cleanup()只对最后一个线程调用。
问题内容: 我们最近在工作中讨论了在多线程环境中是需要使用ConcurrentHashMap还是可以简单地使用常规HashMap。HashMaps的参数有两个:它比ConcurrentHashMap更快,所以我们应该尽可能使用它。而且显然只有在修改后迭代地图时才会出现,所以“如果我们仅从地图进行PUT和GET,则常规HashMap有什么问题?” 是争论。 我以为并发PUT操作或并发PUT和READ
这里我用java开发。 我有一个for循环中的线程,我想连续运行5次。不幸的是,循环在第二次运行时停止,出现了一个错误: 异常在线程"main"java.lang.IllegalThreadStateExctive在java.base/java.lang.Thread.start(Thread.java:793) 我知道这个错误是什么意思,但是我要求他在确定完成线程时恢复循环,这样就不会有任何错误
问题内容: 我已经成功设置了Spring Batch项目教程。我真的很想知道是否有可能在“ Spring级别”使它成为多线程的。 我想要的基本思想是列出任务或任务步骤的列表,并让它们由独立的线程拾取和处理,理想情况下是从限制为“ n”个线程的池中进行。 这可能吗?如果是这样,怎么办?有人可以引导我到我目前所在的位置吗? 简单的项目我是从本教程在这里。它基本上具有不同的任务,这些任务将消息打印到屏幕
问题内容: 有人可以帮助我了解什么是Java 以及何时使用它吗? 对于该程序的工作方式,我没有一个很清楚的想法。据我了解,所有三个线程同时启动,每个线程将在3000ms之后调用CountDownLatch。因此,递减计数将逐一递减。锁存器变为零后,程序将打印“ Completed”。也许我的理解方式不正确。 // ------------------------------------------