java - 特定情况的并发机制

标签 java concurrency

情况是这样的(看下面的EDIT2):

SITUATION

我有一种方法(方法A),它会一个接一个地循环任务组件,并在它们满足条件时删除它们,这将触发上述问题正在处理的事件(我的小方法链式 react )。

我有一个 AtomicBoolean,当该链正在执行时,它将为 true;当它完成或不执行时,它将变为 false,方法 A 可以访问该值。

现在,我知道方法 A 到底在哪里触发事件(它会在删除对象时触发它),因此我可以从方法 A 手动将 AtomicBoolean 设置为 true。

现在我需要做的就是暂停该方法,直到 AtomicBoolean 变为 false。

我无法使用 PropertyChangeListener,因为我可以将它放在方法中间并使用它来暂停它,我必须将我的方法分解为较小的方法,但我不能这样做,

如果 Lock 类可以在这里工作,我不知道如何工作。

基本上,我需要的是:

while (AtomicBoolean)
{
    Thread.sleep(0);
}

但是以更智能的形式编写,因此不会折磨处理器。

最佳答案

使用 CountDownLatch ( http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html ) 并在检查线程完成后触发它。

线程 1(执行工作):

CountDownLatch signal = new CountDownLatch(1);
// ...
signal.countDown();

线程 2(等待其他线程完成其工作):

//..
// await will block until the other thread triggers countDown
signal.await();
//done

关于java - 特定情况的并发机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728612/

相关文章:

java - 为什么 Scala 通常是为每个 Scala 项目安装,而不是在系统范围内安装?

java - 是否可以在没有官方 oracle dmg 文件的情况下在 mac os x 上安装 JDK 7 或 8?

c++ - T、volatile T 和 std::atomic<T> 之间有什么区别?

java - 并发和日历类

java - 在 Java 7 中实现并发和并行

java - 将项目插入队列后,BlockingDeque 不会解除阻塞

java - 如何编写基于事件的单线程程序?

java - 执行多个订阅者 rxjava

Maven/Jenkins java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本 51.0

java - Gson java.text.ParseException : Unparseable date