更新时间:2023-06-19 来源:黑马程序员 浏览量:

在Java中,线程池的关闭方式有三种:shutdown()、shutdownNow()和awaitTermination()。
·该方法会平滑地关闭线程池,不再接受新的任务提交。
·它会等待所有已提交的任务执行完毕,包括已经在等待队列中的任务。
·如果线程池已经关闭,则调用该方法没有任何效果。
ExecutorService executor = Executors.newFixedThreadPool(5);
// 执行任务...
executor.shutdown(); // 关闭线程池
// 等待线程池中的任务执行完毕
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
// 处理中断异常
}·该方法会强制关闭线程池,尝试中断正在执行的任务,并返回等待执行的任务列表。
·它会立即停止线程池的运行,不再处理等待队列中的任务。
·如果线程池已经关闭,则调用该方法没有任何效果。
ExecutorService executor = Executors.newFixedThreadPool(5);
// 执行任务...
List<Runnable> unprocessedTasks = executor.shutdownNow(); // 强制关闭线程池
// 处理未执行的任务
for (Runnable task : unprocessedTasks) {
// 处理未执行的任务...
}·该方法用于等待线程池中的任务执行完毕,或者在指定的时间内等待任务执行完毕。
·它会阻塞当前线程,直到满足以下条件之一:所有任务执行完毕、超过指定的等待时间、当前线程被中断。
这些关闭方式可以根据具体需求选择合适的方法,shutdown()和awaitTermination()提供了一种平滑关闭线程池的方式,而shutdownNow()则提供了一种立即停止线程池的方式。
ExecutorService executor = Executors.newFixedThreadPool(5);
// 执行任务...
executor.shutdown(); // 关闭线程池
// 等待线程池中的任务执行完毕,最多等待1小时
try {
if (!executor.awaitTermination(1, TimeUnit.HOURS)) {
// 执行超时处理
}
} catch (InterruptedException e) {
// 处理中断异常
}1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19