5

スレッドをにフィードしていExecutorServiceます。

これらのスレッドは一部のデータを操作しており、競合がある場合、データオブジェクトは例外をスローします。例外は競合するスレッドによってキャッチされ、そのスレッドは中止されて実行を完了しません。

これが発生した場合、中止したスレッドをキューに戻し、エグゼキュータにフィードバックする必要があります。

親スレッドから例外がスローされたかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

11

あなたがあなたsubmit()の仕事をするとき、ExecutorServiceあなたは結果として未来を手に入れます。実行が終了したらget()、その未来を呼び出すことができます。これにより、該当する場合は結果が返されExecutionExceptionます。元のタスクが結果をスローした場合は、結果がスローされます。実際の例外オブジェクトが必要な場合は、次のことができますgetCause()

また、サービスに戻ることに注意してくださいTask。そのタスクは、Thread実際には終了していない(例外をキャッチし、新しい例外を待機している)で実行されます。

使用例を次に示します(Runnable結果を気にしない場合に使用できます)。

Callable<String> myCallable = ...;
Future<String> future = myExector.submit(myCallable);

// Do something else until myCallable.isDone() returns true.
try {
    String result = future.get();
}catch(ExecutionException e){
    // Handle error, perhaps create new Callable to submit.
}
于 2012-12-10T07:40:32.693 に答える