#ExecutorService awaitTermination
https://zhuanlan.zhihu.com/p/602451856
终止 ExecutorService 的一个最佳实践就是,shutdown 和 shutdownNow 两个方法一起,并结合 awaitTermination 来实现超时等待。
executorService.shutdown();
try {
if (!executorService.awaitTermination(800, TimeUnit.MILLISECONDS)) {
executorService.shutdownNow();
}
} catch (InterruptedException e) {
executorService.shutdownNow();
}
调用 shutdown,阻止新提交任务,并让等待队列中的任务执行完成 调用 awaitTermination(),保证等待队列中的任务最多执行 800 ms,以防止执行任务时间太长或被阻 塞,而导致 ExecutorService 不能被销毁。 在 awaitTermination 等待 800 ms 后,ExecutorService 中还有任务没执行完,则调用 shutdownNow 强行终止,以释放 ExecutorService 资源。 上面代码执行 awaitTermination 时所在的线程也有可能被 interrupt,因此需要 catch InterruptedException。