0

状況は次のとおりです(EDIT2の下を見てください):

状況

上記の質問が扱っているイベント(私の小さなメソッド連鎖反応)をトリガーする基準を満たす場合、真のコンポーネントを1つずつ循環させ、それらを削除するメソッド(メソッドA)があります。

私は AtomicBoolean を持っています。これはチェーンの実行中に true になり、チェーンが完了するか実行されていないときに false になり、メソッド A がアクセスできます。

これで、メソッド A がイベントをトリガーする正確な場所 (オブジェクトを削除するときにトリガーされる場所) がわかったので、メソッド A から手動で AtomicBoolean を true に設定できます。

あとは、AtomicBoolean が false になるまでメソッドを一時停止するだけです。

PropertyChangeListener は、メソッドの途中で使用して一時停止できるため、使用できません。メソッドをより小さなものに分割する必要がありますが、これはできません。

Lock クラスがここで機能する可能性がある場合、その方法を確認できません。

基本的に、これが必要なもの:

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

しかし、よりスマートな形式で書かれているため、プロセッサを苦しめることはありません.

4

1 に答える 1

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