【发布时间】:2013-07-03 17:51:52
【问题描述】:
我有任意数量的任务提交给 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(),但这不是我想要的,因为它会阻止该特定任务直到它完成,但如果另一个任务已经完成但结果失败怎么办?
最有效的方法是什么?
编辑: 可能重复的问题:In Java, how do I wait for all tasks, but halt on first error?
【问题讨论】:
-
ExecutorCompletionService。您正在尝试做的是 javadoc 中的一个示例。
标签: java multithreading concurrency threadpoolexecutor