1

質問があります。次のコードで、スレッドが wait ステートメントでブロックされ、別のスレッドが foo() を実行しようとすると、hello world メッセージが出力されますか? なぜ?

synchronized foo(){
    system.out.println("hello world");
    .....
    wait();
    .....
}
4

3 に答える 3

3

スレッドがメソッドに入るにfooは、foo メソッドを含むオブジェクト (モニター) をロックする必要があります。がwait実行されると、スレッドはモニターのロックを解放します。したがって、別のスレッドが foo を実行しようとすると (ロックを取得できるとします)、"hello world" メッセージが出力されます。

于 2010-04-26T09:34:45.833 に答える
1

また、wait()呼び出しをしばらくの間ラップすることもベストプラクティスです。理由:散発的な目覚め!

于 2010-04-26T13:50:08.563 に答える
1

はい。

待つ(); モニターを放棄するので、スレッド A が wait() でブロックされている場合は yes です。、スレッド B は foo に入り、hello world を出力できます

于 2010-04-26T09:32:38.493 に答える