ExecutorService を使用していくつかの Callable スレッドを実行しています。ExecutorService に送信する前に、スレッドはデータで初期化されます。
Future.get() によってスローされた例外を処理するとき、元のデータでメッセージをログに記録したいと考えています。Future オブジェクトからそれを作成した元のスレッドに戻ることは可能ですか?
疑似コード:
void run(List<Data> dataList) {
List<Future<Foo>> results = new ArrayList<Future<Foo>>();
for (Data data : dataList) {
Callable<Foo> thread = new FooCallable(data);
Future<Foo> result = this.executorService.submit(thread);
results.add(result);
}
...
for (Future<Foo> result : results) {
Foo foo;
try {
foo = result.get();
} catch (InterruptedException e) {
//
// I would like access to the original Data object here
//
} catch (ExecutionException e) {
//
// and here
//
}
}
}