如何确保所有线程都停止与 shutdownNow() ?



我正在使用Java的ExecutorService来同时运行一些任务。我面临这种情况,我有多个线程更新我的数据库,如果其中任何一个引发异常,我想停止所有正在运行的线程执行并回滚数据库。

我可以用shutdownNow((来做到这一点。但是文档中有一个警告:

此方法不会等待主动执行的任务终止。 使用 awaitTerminate 来执行此操作。

不过,普通的 olshutdown()方法也有同样的警告。我读过使用shutdown()的首选方法是等待终止并在终止超时时调用shutdownNow(),例如:

executorService.shutdown();
try {
executorService.awaitTermination(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
executorService.shutdownNow();
}

那么,如果shutdownNow()没有立即终止所有内容,我该怎么办?在回滚数据库之前确保所有线程都已停止执行的最佳方法是什么?

如果shutdownNow((没有立即终止所有内容,我该怎么办?

提交错误报告。 然后修复您的代码,以便awaitTermination()调用永远不会超时。 要么这样,要么想办法将这些任务正在做的任何事情转移到一个单独的过程中,你可以安全地杀死。

相关内容

  • 没有找到相关文章

最新更新