%ignore_a_1%有五种状态:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED。RUNNING为初始状态,可接收任务;调用shutdown()后进入SHUTDOWN,不再接收新任务但处理队列任务;调用shutdownNow()进入STOP,尝试中断执行中的任务并清空队列;所有任务终止且工作线程为0时进入TIDYING,触发terminated()方法;该方法执行完后进入TERMINATED,资源释放。状态流转不可逆,路径为RUNNING→SHUTDOWN→TIDYING→TERMINATED或RUNNING→STOP→TIDYING→TERMINATED。

Java 中的线程池(ThreadPoolExecutor)有五种状态,这些状态用来表示线程池的生命周期阶段。它们定义在 ThreadPoolExecutor 的内部枚举中,通过一个原子整型字段 ctl 来维护。
RUNNING
线程池创建后默认处于此状态,能够接收新任务并处理队列中的任务。
说明:即使调用了 shutdown() 之前,线程池都处于 RUNNING 状态。
建议:这是正常工作的起始状态。
SHUTDOWN
调用 shutdown() 方法后,线程池进入此状态。
说明:不再接受新任务,但会继续处理已加入任务队列中的任务。
特点:已提交的任务会执行完毕,不会中断正在运行的线程。
STOP
调用 shutdownNow() 方法后,线程池进入此状态。
说明:不接受新任务,同时尝试中断所有正在执行的任务,并清空任务队列。
注意:不一定能真正中断所有线程,取决于任务是否响应中断。
TIDYING
当所有任务都已终止,且工作线程数量为 0 时,线程池过渡到 TIDYING 状态。
说明:这是一个中间状态,表示即将完成清理工作。
触发:此时会调用 terminated() 钩子方法。
TERMINATED
在 terminated() 方法执行完成后,线程池变为 TERMINATED 状态。
说明:线程池彻底终止,所有资源释放。
建议:可通过重写 terminated() 方法来做一些收尾操作,比如日志记录或通知。
基本上就这些。线程池的状态流转是不可逆的,只能从前往后进行,比如 RUNNING → SHUTDOWN → TIDYING → TERMINATED,或者 RUNNING → STOP → TIDYING → TERMINATED。
Word-As-Image for Semantic Typography
文字变形艺术字、文字变形象形字
62 查看详情
以上就是java 中线程池都有哪些状态?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1020078.html
微信扫一扫
支付宝扫一扫