0

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

情况

我有一个方法(方法 A),它将一个接一个地循环真正的组件,如果它们符合将触发上述问题正在处理的事件(我的小方法链式反应)的标准,则将它们删除。

我有一个 AtomicBoolean ,它在该链执行时为真,在完成或不执行时变为假,方法 A 可以访问。

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

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

我不能使用 PropertyChangeListener 因为我可以把它放在方法的中间并用它来暂停它,我必须把我的方法分解成更小的方法,这是我做不到的,

如果 Lock 类是可以在这里工作的东西,我看不出如何。

基本上,我需要这个:

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

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

4

1 回答 1

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
于 2013-09-10T20:58:20.147 回答