Java 如何正确地关闭线程池
时间: 2023-06-30 15:20:08 浏览: 108
Java中正确关闭线程池的方法如下:
1. 调用ThreadPoolExecutor的shutdown()方法:该方法会将线程池状态设置为SHUTDOWN,然后尝试停止所有正在执行的任务,但不会影响等待执行的任务。当所有正在执行的任务都执行完毕后,线程池会停止。
2. 调用ThreadPoolExecutor的shutdownNow()方法:该方法会将线程池状态设置为STOP,然后尝试停止所有正在执行和等待执行的任务,并返回所有等待执行的任务列表。
3. 调用ExecutorService的awaitTermination()方法:该方法会阻塞当前线程,直到线程池中的所有任务都执行完毕或者等待时间超过了指定的时间。一般在调用shutdown()或shutdownNow()方法后再调用该方法。
示例代码如下:
```java
ExecutorService executorService = Executors.newFixedThreadPool(10);
// 执行任务
executorService.shutdown(); // 关闭线程池
try {
if(!executorService.awaitTermination(60, TimeUnit.SECONDS)) { // 等待60s
executorService.shutdownNow(); // 立即关闭线程池
}
} catch (InterruptedException e) {
executorService.shutdownNow(); // 中断线程池
Thread.currentThread().interrupt();
}
```
在关闭线程池时,一定要注意所有正在执行的任务是否已经全部完成,否则可能会导致数据丢失或程序异常。
阅读全文