2012-08-02 68 views
5

我已經檢查了甲骨文的Java API,它提供了一些信息是FutureTask.isDone()的Java FutureTask完成檢​​查

,但我需要檢查任務是否已經完成或與任何錯誤而終止。即使完成/終止,isDone()方法也會返回。但是由於某些問題,我需要知道它是完成還是終止。

回答

11

如果FutureTask做,後來叫get()(可無任何超時,就應該立即返回)。它要麼返回一些結果或拋出:

ExecutionException - 如果計算拋出異常

ExecutionException.getCause()將返回從任務引發的異常。

+0

你可以叫'得到()',即使'FutureTask'尚未完成;在這種情況下'get()'等待完成。 – Pino 2016-10-20 14:18:22

0

爲什麼不叫FutureTask.get()

這將返回結果或拋出包含最初拋出的異常/捕獲的異常。如果任務沒有完成,dit將會阻止,並且您可以選擇提供超時。

我會通常希望客戶簡單地調用每個FutureTaskget()反過來一旦創建,而不是輪詢isDone()

0

isDone()回報真的,你想通過調用get()方法來檢查執行的結果得到的結果。 get()操作可以拋出ExecutionException,其中包含原因,您可以在其中找到問題。

+1

即使'isDone()'仍然是false,你可以調用'get()';在這種情況下'get()'等待完成。 – Pino 2016-10-20 14:19:02