同期ブロック内の while ループ内で wait() を呼び出す必要があるというパラダイムが提唱されています。
私の質問は、waiting() スレッドがロックを取り戻す方法です。
// Thread 1
synchronized (mon) {
while (!condition)
mon.wait();
// Do something
}
//Thread 2
synchronized (mon) {//set condition appropriately
mon.notify();
}
スレッド 1 が最初に実行され、条件の待機を開始するとします。ロックを解除し、スレッド 2 がロックを取得して条件を設定し、スレッド 1 に通知します。これで、スレッド 1 がロックを取得し、条件を確認して、「何かを実行」の実行を開始します。
私の質問は、スレッド 1 が while 条件から実行を開始することを通知されたとき、Synchronized(mon) を持っていたコード行が二度と実行されない場合、スレッド 1 はどのようにロックを取得するのでしょうか? ロックを Thread 1 に戻す内部ダイナミクスは何ですか?