1)昨日だけ私はこの質問をしました条件対待機通知メカニズム
2) 同じものを編集して質問にいくつかの if を追加したかったのですが、煩雑になり、読者の興味をそそったり困惑させたりするのに十分なテキストが含まれていた可能性があるため、ここで新しい質問をすることを考えました。
3) ポイント番号 1) で URL が指定されている私の投稿のコンテキストで、単一のデータ構造「S」で動作する P1、T1 および P2、T2 の 4 つのスレッドのケースを考えてみましょう。
4) 待機通知よりも Condition インターフェースを使用する利点を再び引き出すことを試みています。
5) コードを検討する
final Lock lock = new ReentrantLock();
Condition c1 = lock.newCondition();
Condition c2 = lock.newCondition();
Condition c3 = lock.newCondition();
Condition c4 = lock.newCondition();
6) (標準の await()/signalAll() の方法で) c1,c2 を使用する P1,T1 を検討してください。P2、T2 がそれぞれ put、take、put1、take1 メソッドとしましょう。
7) c1.signalAll() を実行すると、条件 1 で待機しているスレッドだけがシグナルを受信します。私は理にかなっていますか?
8) 同じ発言を実装するための待機/通知メカニズムを検討してください。
private static final Object lock= new Object();
synchronized(lock)
put、take、put1、take1 を考えてみましょう。したがって、いずれかのスレッドが条件を満たす条件のいずれかで lock.notifyAll() を実行すると、他の条件のために待機中のスレッドでも通知を受け取ります。本当 ?。これは、条件メカニズムで待機/通知を使用することの欠点として数えることができるものですか?