スレッドをにフィードしていExecutorServiceます。
これらのスレッドは一部のデータを操作しており、競合がある場合、データオブジェクトは例外をスローします。例外は競合するスレッドによってキャッチされ、そのスレッドは中止されて実行を完了しません。
これが発生した場合、中止したスレッドをキューに戻し、エグゼキュータにフィードバックする必要があります。
親スレッドから例外がスローされたかどうかを確認するにはどうすればよいですか?
スレッドをにフィードしていExecutorServiceます。
これらのスレッドは一部のデータを操作しており、競合がある場合、データオブジェクトは例外をスローします。例外は競合するスレッドによってキャッチされ、そのスレッドは中止されて実行を完了しません。
これが発生した場合、中止したスレッドをキューに戻し、エグゼキュータにフィードバックする必要があります。
親スレッドから例外がスローされたかどうかを確認するにはどうすればよいですか?
あなたがあなた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.
}