有没有办法知道ExecutorService是否成功结束?

时间:2012-04-11 13:59:31

标签: java concurrency executorservice

当异常发生时,我在ExecutorService上调用shutdownNow()。我认为isTerminated()会给我成功状态,当所有线程完成时为true,否则为false。但无论怎样,我总是如此。有什么建议吗?

3 个答案:

答案 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的方法检查任务是否完成以及你的标志是否成功完成。