我通過將Callable
s提交到Executor
創建了一組Futures
。僞代碼:等待一批期貨完成時超時?
for all tasks
futures.add(executor.submit(new callable(task)))
現在我想讓所有期貨最多等待n秒,直到全部完成。我知道我可以打電話給Future#get(timeout)
,但是如果我按順序爲我的所有期貨在循環中調用,那麼時間開始加起來。僞代碼:
for all futures
future.get(timeout)
get
塊以超時,直到結果已經準備就緒。因此,如果第一個在超時之前完成,第二個也在超時之前完成,那麼整個執行時間至多爲number of futures * timeout
而不是timeout
。
因此,我正在尋找一種方法,它接受Future
的列表和超時,並行運行,然後返回未來結果的集合。有任何想法嗎?
這並不完全清楚。當超時到期時,你想要發生什麼還沒有完成的任務?你希望他們被取消還是被允許繼續? –
他們應該被取消。另外,不知何故,我需要知道哪些已完成,哪些沒有完成。我想因爲我可以在期貨上重複一遍,並在所有期貨上調用'isDone'。 –