質問があります。次のコードで、スレッドが wait ステートメントでブロックされ、別のスレッドが foo() を実行しようとすると、hello world メッセージが出力されますか? なぜ?
synchronized foo(){
system.out.println("hello world");
.....
wait();
.....
}
質問があります。次のコードで、スレッドが wait ステートメントでブロックされ、別のスレッドが foo() を実行しようとすると、hello world メッセージが出力されますか? なぜ?
synchronized foo(){
system.out.println("hello world");
.....
wait();
.....
}
スレッドがメソッドに入るにfoo
は、foo メソッドを含むオブジェクト (モニター) をロックする必要があります。がwait
実行されると、スレッドはモニターのロックを解放します。したがって、別のスレッドが foo を実行しようとすると (ロックを取得できるとします)、"hello world" メッセージが出力されます。
また、wait()呼び出しをしばらくの間ラップすることもベストプラクティスです。理由:散発的な目覚め!
はい。
待つ(); モニターを放棄するので、スレッド A が wait() でブロックされている場合は yes です。、スレッド B は foo に入り、hello world を出力できます