等待未来列表
2022-08-31 06:18:26
我有一个返回期货的方法List
List<Future<O>> futures = getFutures();
现在,我想等到所有期货都成功完成处理,或者任何输出由期货返回的任务抛出异常。即使一个任务抛出异常,等待其他期货也没有意义。
简单的方法是
wait() {
For(Future f : futures) {
try {
f.get();
} catch(Exception e) {
//TODO catch specific exception
// this future threw exception , means somone could not do its task
return;
}
}
}
但这里的问题是,例如,如果第4个期货抛出一个异常,那么我将不必要地等待前3个期货可用。
如何解决这个问题?倒计时闩锁会以任何方式帮助吗?我无法使用Future,因为java文档说isDone
boolean isDone()
Returns true if this task completed. Completion may be due to normal termination, an exception, or cancellation -- in all of these cases, this method will return true.