假设我有一个方法如下:
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()
抓住)?可调用者抛出的任何东西(包括InterruptedException
,对吧?)都是ExecutionException
,我们永远不会取消任何期货,而且永远不会调用服务的shutdownNow()
。
除此之外:它是什么,是否有可能使这种轮询方法更加防范InterruptedException
之类的内容?
答案 0 :(得分:0)
InterruptedException
会在等待(阻止)callable完成时被get
抛出。
我不确定你的防弹意味着什么,你必须处理抛出异常的可能性。
答案 1 :(得分:0)
调用get并等待完成的线程抛出InterruptedException,而不是由可调用的