■ はじめに
* 割込例外 InterruptedException は、他の例外とは少し毛色が違った例外なので、
少し考えを整理する
■ タスクの分類
[1] キャンセル可能タスク
[2] キャンセル不能タスク
[1] キャンセル可能タスク
* そのまま割込例外 InterruptedException を投げればいい
[2] キャンセル不能タスク
* 割り込みを単に無視・拒否しないで実装の仕方を考える(以下のサンプル参照)
サンプル
boolean isInterrupted = false;
try {
// 無限ループを使って必ず処理を終わらせる
while (true) {
try {
// ・・・必ず終わらせたい処理
return;
} catch (InterruptedException ex) {
// !!割込発生!! => フラグを立てて再実行
isInterrupted = true;
// fall through and retry
}
}
} finally {
// 割込が発生していたら、割込があったことを現在のメインスレッドに伝える
if (isInterrupted) {
Thread.currentThread().interrupt();
}
}