java并发: flag/event

标签 java events concurrency

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

相关文章:

java - 从Processing迁移到Flash CS5,我该如何开始?

java - 无法将搜索栏与文本关联起来

java - 为什么我必须创建 int 数组而不是直接传递一个作为参数?

concurrency - sync.WaitGroup 不等待

haskell - 分而治之算法的并行性

Java:简单的 If 语句不执行

java - 使用 Encog 的神经网络分类器

javascript - 在 iframe 中禁用 JavaScript 按键事件

javascript - 如何仅在 JavaScript/jQuery 中没有默认值时才执行操作?

javascript - 是否可以在 JavaScript 中访问事件队列?