次のようなメソッドがあるとします。
public void poll(Callable<Boolean> callable) {
ScheduledExecutorService service = Executors.newSingleThreadedScheduledExecutor();
Future<Boolean> future = service.schedule(callable, 0L, TimeUnit.MILLISECONDS);
try {
while (!future.get()) {
future = service.schedule(callable, 5L, TimeUnit.MINUTES);
}
} catch (ExecutionException e) {
// ...
} catch (InterruptedException e) {
// ...
} finally {
service.shutdown();
}
}
はどのようにしてInterruptedException
投げられた (そして巻き込まれたpoll()
) のでしょうか? callable ( を含むInterruptedException
)によってスローされるものはExecutionException
すべて であり、先物をキャンセルすることはなく、サービスshutdownNow()
は決して呼び出されません。
余談ですが、このポーリング方法を次のようなものに対してより防弾にすることは可能InterruptedException
ですか?