当异常发生时,我在我的 ExecutorService 上调用 shutdownNow()。我认为 isTerminated() 会给我成功状态,当所有线程完成时为真,否则为假。但无论如何,我总是说实话。有什么推荐吗?
问问题
1798 次
3 回答
1
我怀疑 isTerminated() 总是返回 true ,因为您正在调用shutdownNow()
而不是shutdown()
and,根据 API 文档shutdownNow()
:
... 典型的实现将通过 Thread.interrupt() 取消
因此,听起来您的任务都立即响应中断尝试,导致它们立即完成。
于 2012-04-11T14:03:11.317 回答
1
shutdownNow()
将停止正在等待的任务。如果您希望当前等待的线程执行,请尝试使用shutdown()
javadoc就可以了: http: //docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#shutdown ()
于 2012-04-11T14:07:42.970 回答
0
正如文档所说,“isTerminated
除非首先调用 shutdown 或 shutdownNow,否则永远不会正确”。所以它只告诉任务是否结束,而不是告诉他们是否成功。你可以有一个标志,比如一个AtomicBoolean
并在成功完成之前切换它的状态。这样,您将使用方法ExecutorService
来检查任务是否完成,并使用标志来检查它是否成功完成。
于 2012-04-11T14:05:07.223 回答