我检查了Oracle Java API,它提供了FutureTask.isDone()
的一些信息但我需要检查任务是否已完成或因任何错误而终止。 isDone()方法即使完成/终止也会返回。但是由于某些问题,我需要知道它是完成还是终止。
答案 0 :(得分:11)
如果FutureTask
完成,之后调用get()
(可以没有任何超时,它应该立即返回)。它将返回一些结果或抛出:
ExecutionException
- 如果计算引发异常
ExecutionException.getCause()
将返回从您的任务中抛出的异常。
答案 1 :(得分:0)
为什么不拨打FutureTask.get()?
这将返回结果或抛出包含最初抛出/捕获的异常的异常。如果任务没有完成,则dit将阻止,并且您可以选择提供超时。
我通常希望客户只需在创建后依次致电get()
FutureTask
,而不是轮询isDone()
。
答案 2 :(得分:0)
当isDone()
返回true时,您希望通过调用get()
方法来检查执行结果来获得结果。 get()
操作可以抛出ExecutionException
,其中包含原因,您可以在哪里找到问题。