当前位置: 首页 > 面试题库 >

何时在Java多线程中重置CyclicBarrier

桓风史
2023-03-14
问题内容

我正在阅读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; DRreset()在通常情况下,您永远不需要使用。



 类似资料:
  • 问题内容: 我写一个简单的应用程序,它涉及三个线程: ,和。 是 生成* 并馈给的生成器类。 * 消耗了 计算平均值。我的号码已经使用该饲料用。用途吃起来。 问题是:: 如果平均值超过中的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

  • 问题内容: 我已经成功设置了Spring Batch项目教程。我真的很想知道是否有可能在“ Spring级别”使它成为多线程的。 我想要的基本思想是列出任务或任务步骤的列表,并让它们由独立的线程拾取和处理,理想情况下是从限制为“ n”个线程的池中进行。 这可能吗?如果是这样,怎么办?有人可以引导我到我目前所在的位置吗? 简单的项目我是从本教程在这里。它基本上具有不同的任务,这些任务将消息打印到屏幕

  • 这里我用java开发。 我有一个for循环中的线程,我想连续运行5次。不幸的是,循环在第二次运行时停止,出现了一个错误: 异常在线程"main"java.lang.IllegalThreadStateExctive在java.base/java.lang.Thread.start(Thread.java:793) 我知道这个错误是什么意思,但是我要求他在确定完成线程时恢复循环,这样就不会有任何错误

  • 问题内容: 有人可以帮助我了解什么是Java 以及何时使用它吗? 对于该程序的工作方式,我没有一个很清楚的想法。据我了解,所有三个线程同时启动,每个线程将在3000ms之后调用CountDownLatch。因此,递减计数将逐一递减。锁存器变为零后,程序将打印“ Completed”。也许我的理解方式不正确。 // ------------------------------------------