当异常发生时,我在ExecutorService上调用shutdownNow()。我认为isTerminated()会给我成功状态,当所有线程完成时为true,否则为false。但无论怎样,我总是如此。有什么建议吗?
答案 0 :(得分:1)
我怀疑isTerminated()始终返回true,因为您正在调用shutdownNow()
而不是shutdown()
和,根据shutdownNow()
的API文档:
...典型的实现将通过Thread.interrupt()
取消
因此,听起来您的任务都会立即响应中断尝试,导致它们立即完成。
答案 1 :(得分:1)
shutdownNow()
将停止正在等待的任务。如果您希望当前正在等待的线程执行,请尝试使用shutdown()
javadoc: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#shutdown()
答案 2 :(得分:0)
正如文档所说,“isTerminated
永远不会是真的,除非先调用shutdown或shutdownNow”。所以它只告诉任务是否结束,而不是它们是否成功。您可以拥有一个标志,例如AtomicBoolean
,并在成功完成之前切换其状态。这样你就可以使用ExecutorService
的方法检查任务是否完成以及你的标志是否成功完成。