关闭ExecutorService的核心是先拒绝新任务、再尽量完成已有任务、最后释放资源;应根据任务重要性与阻塞性选择shutdown()(温和等待)或shutdownNow()(立即中断),并配合awaitTermination()与异常处理确保正确终止。

关闭 ExecutorService 的核心是**先拒绝新任务,再尽量完成已有任务,最后释放资源**。直接调用 shutdown() 或 shutdownNow() 是标准做法,但具体选哪个、后续是否等待,得看业务需求。
调用 shutdown() 后,线程池不再接受新提交的任务(后续 submit() 或 execute() 会抛 RejectedExecutionException),但会继续执行已加入队列的和正在运行的任务。
awaitTermination() 使用,主动等待结束executor.shutdown();
try {
if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 超时后强制中断
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}尝试中断所有正在执行的任务,并返回尚未执行的任务列表(从任务队列中“拔出来”)。注意:中断只是建议,能否真正停止取决于任务自身是否响应中断(比如是否检查 Thread.interrupted() 或使用可中断的阻塞方法)。
在 awaitTermination() 等待过程中可能被其他线程中断,此时应恢复中断状态并做清理。
功能说明:1 会员可申请开店功能2 购买在线扣除金额3 冲值卡自动生成4 支持2级分类5 数据库压缩和备份6 会员分5个级别7 商品带讨论8 自带融合论坛,可关闭打开9 密码找回功能10 新闻``滚动新闻``帮助中心11 后台设置前台会员的上传权限12 可关闭/打开商店13 会员自助发布商品功能14 用户问题咨询管理
0
立即学习“Java免费学习笔记(深入)”;
InterruptedException 后,一般要调用 Thread.currentThread().interrupt()
catch (InterruptedException e) {}
shutdownNow() 多次调用也无额外效果基本上就这些。关键不是“怎么关”,而是“什么时候关、关到什么程度”。根据任务性质决定策略,再配合适当的等待和兜底处理。
以上就是java中关闭ExecutorService的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号