1

次のようなメソッドがあるとします。

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ですか?

4

2 に答える 2

0

InterruptedException は、呼び出し可能オブジェクトではなく、get を呼び出して完了を待機しているスレッドによってスローされる可能性があります。

于 2014-08-16T02:51:32.317 に答える
0

callable が終了するのを待っている (ブロックしている) 間InterruptedExceptionに によってスローされます。get

防弾の意味がわかりません。例外がスローされる可能性を処理する必要があります。

于 2014-08-16T00:32:49.503 に答える