从期货抛出InterruptedException



假设我有如下方法:

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之类的东西更加防弹?

在等待(阻塞)可调用对象完成时,InterruptedException将被get抛出。

我不确定你所说的防弹是什么意思,你必须处理抛出异常的可能性

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

相关内容

  • 没有找到相关文章

最新更新