我有 3 个FutureTask<T>
对象。我希望它们被异步处理。但是,一旦 FutureTasks 的get()
方法之一没有返回null
,我想继续,即我的方法(包装器)返回并且不等到其他两个 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) { }
}
我不确定如何以适当的方式捕获异常(由 get() 抛出),因为我假设它们会被抛出,因为我只是返回而不等待其他两个任务完成。此外,我怀疑代码是否会按预期工作。我觉得我接近解决方案但缺少一些东西。