gpt4 book ai didi

java并发: flag/event

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:01 25 4
gpt4 key购买 nike

我正在 java 并发类中寻找不可重置的标志或事件类,我可以用它来检查是否完成了某些事情并且是线程安全的。理想情况下是这样的:

public interface Event
{
/** returns true if signal() has been called */
public boolean hasOccurred();
/** returns when signal() has been called */
public void await();
public void signal();
}

这样的东西已经存在了吗?我脑抽筋试图记住

最佳答案

我认为您正在寻找 CountDownLatch - 特别是,用计数 1 实例化它。

那么你的操作如下:

  • 已发生:latch.getCount() == 0
  • 等待:latch.await()
  • 信号:latch.countDown()

如果您想要可以重置和重复使用的东西,那么 CyclicBarrier可能更多你正在寻找的东西。 CountDownLatches 一旦被触发,就无法重置。

编辑:值得注意的是,与您提到的 Event 接口(interface)相比,CountDownLatch 也更容易组合成更大的操作。因此,例如,如果您要等待 4 个工作线程完成,您可以为每个工作线程提供自己的事件/1 计数锁存器,然后依次等待每个工作线程。不过,简单地创建一个计数为 4 的 CountDownLatch,并在所有工作人员之间共享它(这根本不需要更改工作人员逻辑,并且不能像使用多个较小的事件那样简单地完成)可以说更干净).

关于java并发: flag/event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4097980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com