首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >线程池状态和如何关闭

线程池状态和如何关闭

作者头像
码农戏码
发布2026-06-25 19:58:44
发布2026-06-25 19:58:44
820
举报

线程池状态

线程池的状态有以下 5 种:

1、RUNNING:运行状态,线程池创建好之后就会进入此状态,如果不手动调用关闭方法,那么线程池在整个程序运行期间都是此状态。

2、SHUTDOWN:关闭状态,不再接受新任务提交,但是会将已保存在任务队列中的任务处理完。

3、STOP:停止状态,不再接受新任务提交,并且会中断当前正在执行的任务、放弃任务队列中已有的任务。

4、TIDYING:整理状态,所有的任务都执行完毕后(也包括任务队列中的任务执行完),当前线程池中的活动线程数降为 0 时的状态。到此状态之后,会调用线程池的 terminated() 方法。

5、TERMINATED:销毁状态,当执行完线程池的 terminated() 方法之后就会变为此状态。

关闭线程池

Java线程池ThreadPoolExecutor提供了三个重要的方法shutdown()、shutdownNow()和awaitTermination():

shutdown:拒绝新任务提交到线程池,待执行与正在执行的任务继续执行。

shutdownNow:拒绝提交新任务到线程池,取消队列中等待执行的任务,尝试取消正在执行任务。

awaitTermination(long timeOut, TimeUnit unit):阻塞线程,等待所有待执行以及正在执行的任务执行完成,或者等到超时,或者线程被中断抛出中断异常,然后返回true或false(表示已超时)

这三个方法的区别是:

shutdown与shutdownNow之后都拒绝提交任务,awaitTermination可以继续提交任务。

awaitTermination是阻塞的,返回结果是线程池是否已停止(true/false)shutdown/Now不阻塞。

shutdownNow是立即关闭,而shutdown是优雅关闭。

确定优雅关闭线程的步骤:

(1)执行shutdown方法,等待所有任务执行完毕并拒绝新任务的提交。

(2)执行awaitTermination(long timeout,TimeUnit unit),指定超时时间,判断是是否已经关闭所有任务,防止线程永远无法关闭。

(3)如果第2步返回fasle,或者被中断。调用shutDownNow方法立即关闭线程池所有任务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农戏码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线程池状态
  • 关闭线程池
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档