2015-03-31 28 views
5

更確切地說,如果我通過調用submit(Callable<T> task)方法開始異步計算ExecutorService(本身由Executors.newCachedThreadPool()構造),我可以等待計算完成並檢索結果通過致電Future.get()Java可調用:在調用get()之前線程會發生什麼

我的問題是:如果計算已經完成,會發生什麼情況,直到我撥打get()?在檢索結果之前線程是否被阻塞?結果是否存儲和線程分配給另一個任務?完全不同的東西?

在此先感謝您的答案

回答

4

不,線程未被阻塞,它將返回到池中。 一般而言,它是調用線程依賴於工作人員,而不是其他方式。因此,如果有結果,請將其返回,如果沒有,請等到它可用。

+0

謝謝你的回答!爲了確保我正確理解你(對不起,英語不是我的母語):如果我啓動多個線程進行計算並在完成後很快檢索結果,這不是問題,因爲完成的任務不使用任何資源吧? – 2015-03-31 18:33:12

+0

@shadow_heart計算結果(=任務)存儲在'Future'對象內,所以你可以隨時「get()」。如果計算還沒有完成,'get()'只會阻塞調用線程。 – isnot2bad 2015-04-01 00:37:05

相關問題