线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED。

线程池状态定义代码如下:
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY = (1 << COUNT_BITS) - 1;
private static final int RUNNING = -1 << COUNT_BITS;
private static final int SHUTDOWN = 0 << COUNT_BITS;
private static final int STOP = 1 << COUNT_BITS;
private static final int TIDYING = 2 << COUNT_BITS;
private static final int TERMINATED = 3 << COUNT_BITS;
private static int ctlOf(int rs, int wc) { return rs | wc; }
说明:
ctl是一个AtomicInteger类型的原子对象。ctl记录了"线程池中的任务数量"和"线程池状态"2个信息。
ctl共包括32位。其中,高3位表示"线程池状态",低29位表示"线程池中的任务数量"。
RUNNING -- 对应的高3位值是111。
SHUTDOWN -- 对应的高3位值是000。
STOP -- 对应的高3位值是001。
TIDYING -- 对应的高3位值是010。
TERMINATED -- 对应的高3位值是011。
线程池各个状态之间的切换如下图所示:
1. RUNNING
(01) 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。
(02) 状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态!
道理很简单,在ctl的初始化代码中(如下),就将它初始化为RUNNING状态,并且"任务数量"初始化为0。
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
2. SHUTDOWN
(01) 状态说明:线程池处在SHUTDOWN状态时,不接收新任务,但能处理已添加的任务。
(02) 状态切换:调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。
3. STOP
(01) 状态说明:线程池处在STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。
(02) 状态切换:调用线程池的shutdownNow()接口时,线程池由(RUNNING or SHUTDOWN ) -> STOP。
4. TIDYING
(01) 状态说明:当所有的任务已终止,ctl记录的"任务数量"为0,线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行钩子函数terminated()。terminated()在ThreadPoolExecutor类中是空的,若用户想在线程池变为TIDYING时,进行相应的处理;可以通过重载terminated()函数来实现。
(02) 状态切换:当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。
当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING。
5. TERMINATED
(01) 状态说明:线程池彻底终止,就变成TERMINATED状态。
(02) 状态切换:线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# concurrency
# 线程池
# Java concurrency线程池之线程池原理(二)_动力节点Java学院整理
# Java concurrency线程池之线程池原理(一)_动力节点Java学院整理
# Java concurrency线程池之线程池原理(四)_动力节点Java学院整理
# 池中
# 为空
# 新任务
# 会由
# 是一个
# 也有
# 状态下
# 不接收
# 可以通过
# 很简单
# 所示
# 将它
# 来实现
# 大家多多
# 如下图
# 但能
# 类中
# 运行状态
# 以及对
# AtomicInteger
相关文章:
如何通过云梦建站系统实现SEO快速优化?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何在宝塔面板创建新站点?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
,网页ppt怎么弄成自己的ppt?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站之星如何快速解决建站难题?
Java解压缩zip - 解压缩多个文件或文件夹实例
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
建站之星导航配置指南:自助建站与SEO优化全解析
上海网站制作开发公司,上海买房比较好的网站有哪些?
制作网站的公司有哪些,做一个公司网站要多少钱?
建站之星ASP如何实现CMS高效搭建与安全管理?
平台云上自主建站:模板化设计与智能工具打造高效网站
如何高效完成自助建站业务培训?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
网站网页制作专业公司,怎样制作自己的网页?
,有什么在线背英语单词效率比较高的网站?
魔方云NAT建站如何实现端口转发?
如何在阿里云完成域名注册与建站?
定制建站哪家更专业可靠?推荐榜单揭晓
建站主机是否等同于虚拟主机?
如何续费美橙建站之星域名及服务?
如何用狗爹虚拟主机快速搭建网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
高性价比服务器租赁——企业级配置与24小时运维服务
高端建站三要素:定制模板、企业官网与响应式设计优化
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
网站制作的步骤包括,正确网址格式怎么写?
h5在线制作网站电脑版下载,h5网页制作软件?
网站企业制作流程,用什么语言做企业网站比较好?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
如何设置并定期更换建站之星安全管理员密码?
python的本地网站制作,如何创建本地站点?
利用JavaScript实现拖拽改变元素大小
C#如何使用XPathNavigator高效查询XML
如何快速搭建高效可靠的建站解决方案?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何制作算命网站,怎么注册算命网站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
制作国外网站的软件,国外有哪些比较优质的网站推荐?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
高防服务器:AI智能防御DDoS攻击与数据安全保障
广州美橙建站如何快速搭建多端合一网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。