我有任意数量的任务提交给 ThreadPoolExecutor。无论任务是否成功,这些任务中的每一个都会返回一个代码。我想要发生的是,返回失败代码的第一个任务将使所有其他任务无效/取消/中断,几乎就像将整个事情短路以节省时间。如果没有任务失败,则所有任务都将运行。假设任务被设计为优雅地处理中断
for(int i = 0; i < size; i++) {
Future<?> future = executor.submit(new Runnable() {
@Override
public void run() {
returnValue = performWork();
if(returnValue == FAILED)
// signal cancel other tasks??
}
});
futureTaskList.add(future);
}
我试图想出一个好的设计,让我可以检查returnValue
是否返回失败的值,以取消剩余任务的工作。
我可以遍历所有期货并做一个get()
但这不是我想要的,因为它会阻止该特定任务直到它完成,但是如果另一个任务已经完成但结果失败怎么办?
有哪些方法可以最有效地完成此任务?
编辑:可能重复的问题:在 Java 中,我如何等待所有任务,但在第一个错误时停止?