情况是这样的(看下面的EDIT2):
我有一种方法(方法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/