そのため、このリソース ( http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html ) は、スレッドが割り込み自体を処理しない場合にスレッドに割り込みビットを設定することを提案しています。コール スタックの上位にあるコードが割り込みを認識し、必要に応じて応答できるようにします。」
別のスレッドで何かを実行するために ExecutorService を使用しているとしましょう。Callable を作成し、この Callable を ExecutorService.submit() に渡します。ExecutorService.submit() は Future を返します。Callable が中断されてから割り込みビットをリセットした場合、関連する Future は、Future.get() が呼び出されたときに InterruptedException をスローしません。したがって、メイン スレッドが生成されたスレッドにアクセスできる唯一の方法がこの Future である場合、Callable で中断されたビットを設定する目的は何でしょうか。
class MyCallable implements Callable<String> {
@Override
public String call() {
while (!Thread.currentThread().isInterrupted()) {
}
Thread.currentThread().interrupt();
return "blah";
}
}
ExecutorService pool = makeService();
Future<String> future = pool.submit(new MyCallable());
// Callable gets interrupted and the Callable resets the interrupt bit.
future.get(); // Does not thrown an InterruptedException, so how will I ever know that the Callable was interrupted?