私は3つFutureTask<T>
のオブジェクトを持っています。それらが非同期で処理されることを望みます。ただし、FutureTasks のget()
メソッドの 1 つが返されないとすぐnull
に続行したいと思います。つまり、メソッド (ラッパー) が返され、他の 2 つの FutureTasks が処理されるまで待機しません。私は次のようなことを考えました:
private File wrapper(final File file) {
ExecutorService executors = Executors.newCachedThreadPool();
File returnFile;
FutureTask<File> normal= ...
FutureTask<File> medium=...
FutureTask<File> huge=...
executors.execute(normal);
executors.execute(medium);
executors.execute(huge);
try {
if((returnFile=normal.get()) != null ||
(returnFile=medium.get()) != null ||
(returnFile=huge.get()) != null)
return returnFile;
} catch(ExecutionException | InterruptedException e) { }
}
他の2つのタスクが完了するのを待たずに戻るだけなので、例外がスローされると想定しているため、(get()によってスローされた)例外を適切な方法でキャプチャする方法がわかりません。さらに、コードが意図したとおりに機能するかどうかは疑問です。私は解決策に近づいていると感じていますが、何かが欠けています。