如何正确关闭ThreadPoolExecutor?
时间: 2024-03-11 11:42:58 浏览: 112
关闭 ThreadPoolExecutor 可以通过以下步骤进行:
1. 调用 `shutdown()` 方法:这个方法会平滑地关闭线程池,不再接受新的任务,但会等待已经提交的任务执行完成。
2. 调用 `awaitTermination()` 方法:这个方法会等待指定的时间,直到所有任务执行完成或者超时。可以使用 `awaitTermination(timeout, TimeUnit)` 来设置超时时间。
3. 调用 `shutdownNow()` 方法:如果希望立即关闭线程池,可以调用这个方法。它会尝试中断正在执行的任务,并返回未执行的任务列表。
下面是一个示例代码:
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue);
// 执行任务...
executor.shutdown(); // 关闭线程池
try {
if (!executor.awaitTermination(timeout, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果超时,则立即关闭线程池
if (!executor.awaitTermination(timeout, TimeUnit.SECONDS)) {
// 如果仍然有任务未完成,可以根据需要进行处理
}
}
} catch (InterruptedException e) {
executor.shutdownNow(); // 如果等待过程中被中断,则立即关闭线程池
Thread.currentThread().interrupt(); // 重新设置中断状态
}
```
阅读全文