全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java concurrency线程池之线程池原理(三)_动力节点Java学院整理

线程有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小时内与您取得联系。