情况就是这个(见下面的EDIT2):
我有一个方法(方法A),它将逐个循环trught组件,如果它们满足将触发上述问题正在处理的事件(我的小方法连锁反应)的标准,则将其删除。
我有一个AtomicBoolean,当该链正在执行时将为true,并且当它完成或不执行时将变为false,A方法可以访问。
现在,我知道方法A在何处触发事件(它会在删除对象时触发它),因此我可以从方法A手动将AtomicBoolean设置为true。
现在我需要做的就是暂停该方法,直到AtomicBoolean变为false。
我不能使用PropertyChangeListener,因为我可以在方法中间使用它来暂停它,我必须将我的方法分解为较小的方法,我不能这样做,
如果Lock类可以在这里工作,我很想知道如何。
基本上,我需要这个:
while (AtomicBoolean)
{
Thread.sleep(0);
}
但是以更智能的形式书写,所以它不会折磨处理器。
答案 0 :(得分:2)
使用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