26

重複の可能性:
JavaExecutorServiceタスクからの例外の処理

ExecutorServiceスレッドの調整にはfromJavaを使用します。私が使用するスレッドを開始するために

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

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

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

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

4

1 に答える 1

39

AFAIRjava.util.concurrent.Future.get()は、過去に呼び出し可能なスロー例外が提供された場合にスローExecutionExceptionします(例外はに格納されますFuture)。

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

于 2012-03-02T14:25:37.347 に答える