当使用Java的Future类时,我该如何知道一个任务何时完成?

5
我正在使用Java的Future类来执行任务,但是isDone方法会在任务完成时返回true。任务的完成可能是由于正常终止、异常或取消——在所有这些情况下,该方法都将返回true。
有没有办法知道它是否因为异常而结束或者是否成功地完成了?
3个回答

6

当您调用Future.get()方法时,可能会出现以下4种情况:

  • 您将获得结果值
  • 如果计算被取消(例如调用Future.cancel(true)),则会收到CancellationException
  • 如果计算抛出异常,则会收到ExecutionException
  • 如果在等待时当前线程被中断(例如executor.shutdownNow()被调用),则会收到InterruptedException

我们如何找出一个Runnable或Callable是否正在被线程执行?Future提供了这些信息吗? - Abidi

2
您可以尝试检索值 - get方法会抛出异常或返回该值。

0

我在我的代码中使用了它,唯一能确定任务是否真正成功完成的方法是使用get()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接