针对特定情况的并发机制

时间:2013-09-10 20:56:15

标签: java concurrency

情况就是这个(见下面的EDIT2):

SITUATION

我有一个方法(方法A),它将逐个循环trught组件,如果它们满足将触发上述问题正在处理的事件(我的小方法连锁反应)的标准,则将其删除。

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

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

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

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

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

基本上,我需要这个:

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

但是以更智能的形式书写,所以它不会折磨处理器。

1 个答案:

答案 0 :(得分:2)

使用CountDownLatchhttp://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