我正在使用Java的ExecutorService
来同时运行一些任务。我遇到这样的情况,我有多个线程更新数据库,并且如果其中任何一个抛出异常,我想停止所有正在运行的线程执行并回滚数据库。
我可以使用shutdownNow()做到这一点。但是文档中有一个警告:
此方法不等待主动执行的任务终止。 使用awaitTermination可以做到这一点。
普通ol shutdown()
方法也有同样的警告。而且我已经读到,使用shutdown()
的首选方法是等待终止,如果终止超时则调用shutdownNow()
,例如:
executorService.shutdown();
try {
executorService.awaitTermination(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
executorService.shutdownNow();
}
如果shutdownNow()
不能立即终止所有操作,该怎么办?在回滚数据库之前,确保所有线程已停止执行的最佳方法是什么?
答案 0 :(得分:0)
shutdownNow()不能立即终止一切怎么办?
提交错误报告。然后修复您的代码,以使awaitTermination()
调用从一开始就不会超时。要么,要么找出一种方法,将这些任务正在执行的操作转移到可以安全地终止的单独进程中。