[英]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.