web-dev-qa-db-ja.com

Callable.call()からスローされた例外をキャッチする場所

可能性のある複製:
Java ExecutorServiceタスク)からの例外の処理

JavaからのExecutorServiceを使用してスレッドを調整します。スレッドを開始するために使用する

_pool = new ExecutorService(2);
callableResults = pool.invokeAll(threads);
_

結果を収集するには、スレッドごとにfuture.get()を使用します。 「スレッド」は、Callableを実装し、call()をオーバーライドするクラスのオブジェクトのリストです。

今、私は次の問題を抱えています。メソッドcall()は、さまざまな特定の例外をスローします。 invokeAll()およびfuture.get()は、InterruptedExceptionのみをスローします。

call()でスローした特定の例外をどこでキャッチできますか?または、そこで処理する必要がありますか?これらの例外の1つがスローされた場合、結果はInterruptedExceptionですか?

22
nano7

AFAIR Java.util.concurrent.Future.get() がスローされる ExecutionException 指定された呼び出し可能オブジェクトが過去に例外をスローした場合(例外はFutureに格納されます) )。

例外をスローすることによって中止されたタスクの結果を取得しようとしたときにスローされる例外。 この例外は、Throwable.getCause()メソッドを使用して検査できます

34