Java线程池有5种不同的状态,下面详解5种常见的线程池状态@mikechen
线程池状态主要分为5种,分别是:Running、ShutDown、Stop、Tidying、Terminated。
如下图所示:
1.Running(运行中)
在这个状态下,线程池被创建并且处于活动状态。它可以接受任务并将其分配给线程来执行。
新任务会被添加到任务队列或直接交给空闲线程执行,线程池可以根据需要创建新线程来执行任务。
2.Shutting Down(正在关闭)
当线程池调用了 shutdown()
方法后,它会进入这个状态。在此状态下,线程池不再接受新的任务,但会继续执行已提交的任务。
正在关闭的线程池会等待已提交的任务完成。它不会中断正在执行的任务,除非任务超时或被取消。
3.Shut Down(已关闭)
在线程池调用了 shutdown()
方法后,并且所有已提交的任务都已完成,线程池会进入这个状态。
已关闭的线程池不再接受新任务,也不会执行已提交的任务。如果尝试提交新任务,将会抛出 RejectedExecutionException
。
4.Tidying(整理中)
在线程池从 “Stop” 状态切换到 “Tidying” 状态,它会尝试执行一些清理操作,包括中断被挂起的任务。
这个状态表示线程池正在进行一些清理操作以关闭线程池。
5.Terminated(已终止)
当线程池调用了 shutdown()
方法,并且所有已提交的任务都已完成(包括已取消的任务),线程池会进入已终止状态。
处于已终止状态的线程池不再接受新任务,也不会执行已提交的任务,线程池已彻底终止,无法重新启动。
线程池状态的变化通常是以下几个过程:
- Running -> Shutdown -> Tidying -> Terminated: 正常的关闭流程,线程池从运行中逐渐过渡到终止状态。
- Running -> Stop -> Tidying -> Terminated: 在线程池停止后,它会执行清理操作并终止。
- Running -> Shutdown -> Terminated: 如果在线程池关闭后,没有等待执行的任务,直接进入终止状态。
以上就是5种线程池状态详解,更多线程池请查看:Java线程池(万字图文详解)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》