[英]How to wait for a list of Futures to complete
我有一份期货清单,我想在完成下一步之前完成所有任务。 目前我这样做:
public static int[] benchmark(){
List<Future<Integer>> futureNumbers = service.invokeAll(callableList);
int[] numbers = new int[events.size()];
int i = 0;
for (Future<Integer> future : futureNumbers) {
numbers[i] = future.get();
}
return numbers;
}
但是之后只有我得到的数组的第一个值是正确的,其他的是0.我怎样才能实现这些numbers
只是在每个任务完成后返回?
非常感谢您的帮助。
根据invokeAll()
方法的Java规范, List<Future<T>>
将包含所有任务的结果,只有在所有线程完成时,无论是正常还是异常,您都将获得Future
。
因此,您的Future对象应该具有所有结果。
执行给定的任务,返回完成所有状态和结果的Futures列表。
可能性:
call()
在try-catch
包含call()
方法的所有代码,并从catch中打印堆栈跟踪。 你会知道是否有一些例外。 Future
对象中没有得到任何东西。 验证步骤:
isDone()
- 如果此任务完成,则返回true。 完成可能是由于正常终止,异常或取消 - 在所有这些情况下,此方法将返回true。
for (Future<Integer> future : futureNumbers) {
System.out.println(future.isDone());
numbers[i] = future.get();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.