5

我正在使用 java 的 Future 类来执行任务,但是如果任务完成,方法 isDone 返回 true。完成可能是由于正常终止、异常或取消——在所有这些情况下,此方法都将返回 true。

有没有办法知道它是因为异常还是因为它成功完成而结束?

4

3 回答 3

6

当您调用 Future.get() 方法时,有 4 种可能的结果:

  • 你得到结果值
  • 你得到 CancellationException - 如果计算被取消(例如 Future.cancel(true) 被调用)
  • 你得到 ExecutionException - 如果计算抛出异常
  • 你得到 InterruptedException - 如果当前线程在等待时被中断(例如 executor.shutdownNow() 被调用)
于 2011-07-12T17:24:14.437 回答
2

您可以简单地尝试检索该值 - 该get方法然后抛出异常或返回该值。

于 2011-07-12T16:58:50.943 回答
0

我已经在我的代码中使用了它,你可以确定任务是否真的成功完成的唯一方法是使用 get()

于 2011-07-12T17:41:33.313 回答