自定义线程池怎么优雅关闭
时间: 2023-07-17 19:01:57 浏览: 56
优雅关闭自定义线程池可以通过以下步骤实现:
1. 停止接受新的任务:在关闭线程池之前,首先需要停止接受新的任务,以防止新的任务被提交。
2. 等待任务完成:调用线程池的`awaitTermination(timeout)`方法等待所有已提交的任务执行完毕,或者等待指定的超时时间。
3. 强制关闭:如果超时时间到达但仍有未完成的任务,可以调用线程池的`shutdownNow()`方法来强制关闭线程池。这将尝试取消所有正在执行的任务,并返回尚未开始执行的任务列表。
下面是一个示例代码,演示了如何优雅地关闭线程池:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class CustomThreadPoolExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 执行任务...
// 停止接受新的任务
executorService.shutdown();
try {
// 等待任务完成,最多等待5分钟
if (!executorService.awaitTermination(5, TimeUnit.MINUTES)) {
// 超时,强制关闭线程池
executorService.shutdownNow();
}
} catch (InterruptedException e) {
// 发生中断异常,强制关闭线程池
executorService.shutdownNow();
}
}
}
```
注意:在关闭线程池之前,确保所有提交的任务都能正常处理完成。