2012-08-02 60 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