• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:wait中にinterruptを呼ばれたスレッドの振る舞いについて)

wait中にinterruptを呼ばれたスレッドの振る舞いについて

このQ&Aのポイント
  • wait中のスレッドがinterruptを呼ばれると、Fooクラスのロックを取得してInterruptedExceptionをスローするかわからない。
  • wait中であるスレッドが他のスレッドによってinterruptされた場合、fooメソッド内でFooクラスのロックを取得してからInterruptedExceptionをスローするかどうかについての疑問です。
  • wait中のスレッドがinterrupt()を実行された時に、Fooクラスのロックを取得してからInterruptedExceptionをスローするのか、すぐにInterruptedExceptionをスローするのかが分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

当然 Foo のインスタンス (Foo クラスじゃないよ!) のロックを取得してから例外がスローされます。 そもそもロックの取得も例外のスローも wait() メソッドの中で行われることなのだから、catch の有無によって動作が変わることなどありえません。wait() メソッドの中から呼び出し元 (つまり foo() メソッド) のコードがどうなっているかなんて知る由もありませんからね。 念のため foo() メソッドの全体の動作を書いておきます。 foo() メソッドがどこからか呼ばれる。 ↓ Foo のインスタンスのロックを取得 ↓ wait() メソッドが呼ばれる ↓ (wait() メソッドの中で) Foo のインスタンスのロックを解除して、待機状態に入る ↓ その後ほかのスレッドから interrupt されると、 (wait() メソッドの中で) Foo のインスタンスのロックを再取得して、InterruptedException をスローする ↓ wait() メソッドから foo() メソッドに戻る ↓ 例外は foo() の中ではキャッチされない ↓ Foo のインスタンスのロックを解除して、foo() メソッドを抜ける ↓ InterruptedException は foo() の呼び出し元に伝播する

__tanpopo__
質問者

お礼

UKY様へ ご回答ありがとうございました。また、ご丁寧に foo() メソッドの全体の動作まで書いていただき ありがとうございました。とてもわかりやすかった です。勉強になりました。勉強不足を痛感しています。

関連するQ&A