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.
然后你的操作如下:
latch.getCount() == 0
latch.await()
latch.countDown()
如果你想要一些你可以重复和重复使用的东西,那么CyclicBarrier可能更符合你的要求.CountDownLatches一旦被触发,就无法重置.
编辑:值得注意的是,与Event
您提到的界面相比,CountDownLatch更容易组合到更大的操作.因此,例如,如果您要等待4个工作线程完成,您可以为每个工作人员提供自己的事件/ 1计数锁存器并依次等待每个工作线程.简而言之,简单地创建一个计数为4的CountDownLatch,并在所有工作者之间共享这一点(可能根本不需要更改工作逻辑,而不能简单地使用多个较小的事件) ).
归档时间: |
|
查看次数: |
1913 次 |
最近记录: |