さて、while() ループを実行するスレッドがあるとしましょう。ループ中に、何かを実行してからスリープに戻ることができます。
public void run() {
while (some_condition) {
doSomeLongJob(); // this could be a long job
try {
Thread.sleep(a_bit); // back to sleep
} catch (InterruptedException ie) {
handleInterruptionButDoNotExitLoop();
}
}
}
いくつかの質問:
- doSomeLongJobの実行中に中断が発生した場合、メソッドは自然な終了まで続行しますか? (誰もThread.interrupted()をチェックしない限り、はい、と思いますが、確認したいと思います);
- 割り込みをキャッチした後、interrupted()ステータスは false にリセットされますか?
- 結論として、スレッドのステータスがリセットされている限り、スレッドをn回中断できますか? doSomeLongJobの実行中の割り込みを処理するために、スレッドのステータスを手動でリセットする方法はありますか?