期货抛出InterruptedException

时间:2014-08-16 00:09:27

标签: java polling scheduledexecutorservice interrupted-exception

假设我有一个方法如下:

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之类的内容?

2 个答案:

答案 0 :(得分:0)

InterruptedException会在等待(阻止)callable完成时被get抛出。

我不确定你的防弹意味着什么,你必须处理抛出异常的可能性。

答案 1 :(得分:0)

调用get并等待完成的线程抛出InterruptedException,而不是由可调用的