スレッドをにフィードしてい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.
}