私は2つのスレッドthread1とthread2を持っています
スレッド1内
synchronized(lock) {
lock.wait();
if(lock == null)
{execute1}
if(lock != null)
{execute2}
}
スレッド2内
synchronized(lock) {
lock.notify();
lock = null;
}
最初にスレッド 1 が呼び出され、次にスレッド 2 が呼び出されます。
thread1 が wait を呼び出した後、ロックを解放します。そしてスレッド 2 は通知を呼び出し、ロックを null に設定します。
スレッド 1 が再びロックを取得しようとすると、例外がスローされないのはなぜですか。lock が null に設定されており、thread1 がそのロックを取得しようとするため、ロックを取得しようとしたときに null ポインター例外をスローするべきではありません。
例外がスローされない場合、thread1 はまだ null ではないロック値を読み取っています。では、ステートメント {execute2} を実行するべきではありませんか?