我正在 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/