java并发:flag/event

Jas*_*n S 6 java concurrency events

我正在寻找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();         
}
Run Code Online (Sandbox Code Playgroud)

这样的事情已经存在吗?我想要记住大脑抽筋

And*_*yle 14

我认为你正在寻找一个CountDownLatch - 特别是,实例化它的计数为1.

然后你的操作如下:

  • hasOccurred:latch.getCount() == 0
  • 等待:latch.await()
  • 信号:latch.countDown()

如果你想要一些你可以重复和重复使用的东西,那么CyclicBarrier可能更符合你的要求.CountDownLatches一旦被触发,就无法重置.

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