北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

InterruptedException

こちらの記事を読んでInterruptedExceptionの意味を納得。これは"割り込みが発生したことを知らせてる"ってよりは、"速やかに処理をキャンセルしてreturnして欲しい"ってことを指示してる例外なのですね。

で、InterruptedExceptionをもらったメソッドだけがキャンセル動作を行っても仕方がないので、この例外は上に伝搬すべきであると。例外をthrowできない場合は、returnする前に自スレッドにもう一度interrupt()をかけて後続の処理に知らせます。

ただし、スレッドが終了する直前ってのはキャンセル動作が終了する直前であるので、これ以上InterruptedExceptionを伝搬する必要はないと書いてあります。Threadのrun()メソッドやmain()メソッドがそれにあたります。Runnableのrun()メソッドがそれに含まれてないのは、ThreadPoolを意識してのことですかね??