ThreadPoolExecutor中的keepAliveTime详解

文章目录

          • 一、keepAliveTime的概念
          • 二、keepAliveTime的设置方法
            • 2.1. 通过构造函数设置
            • 2.2. 通过setKeepAliveTime方法动态设置
          • 三、线程是如何根据keepAliveTime进行销毁的

阅读这篇文章,你将会知道:
keepAliveTime的概念。
keepAliveTime是如何设置的。
线程是如何根据keepAliveTime进行销毁的。

一、keepAliveTime的概念
  • 1 keepAliveTime的单位是纳秒,即1s=1000000000ns,1秒等于10亿纳秒。
  • 2 keepAliveTime是线程池中空闲线程等待工作的超时时间。
  • 3 当线程池中线程数量大于corePoolSize(核心线程数量)或设置了allowCoreThreadTimeOut(是否允许空闲核心线程超时)时,线程会根据- 1 keepAliveTime的值进行活性检查,一旦超时便销毁线程。
  • 4 否则,线程会永远等待新的工作。
    /*** Timeout in nanoseconds for idle threads waiting for work.* Threads use this timeout when there are more than corePoolSize* present or if allowCoreThreadTimeOut. Otherwise they wait* forever for new work.*/private volatile long keepAliveTime;
二、keepAliveTime的设置方法
2.1. 通过构造函数设置

通过 keepAliveTime 、unit共同决定实际的 keepAliveTime值,最终会转化成纳秒单位。
在这里插入图片描述

2.2. 通过setKeepAliveTime方法动态设置

重新设置线程池的keepAliveTime属性,如果发现将要设置的值比原来的keepAliveTime值要小(即减小keepAliveTime),则触发interruptIdleWorkers(),中断空闲线程。
在这里插入图片描述
interruptIdleWorkers()是怎么中断线程的呢?
(1)interruptIdleWorkers先拿出所有的工作者进行遍历,判断工作者对应的线程是否已经中断。
(2)如果没有产生中断,则判断是否可以获得锁,如果能获得锁,则代表是空闲线程,然后中断该线程。
(3)至于线程的中断在什么时候会抛出中断异常,同学们可以自己找下资料,也可以参考下别人写的这篇文章Java并发之线程中断
在这里插入图片描述

三、线程是如何根据keepAliveTime进行销毁的
  • 1.线程池中的线程通过工作者(Worker)这个类进行包装,Worker通过 ThreadPoolExecutor.runWorker() 这个方法进行自旋,从队列中获得task,并完成工作。

  • 2.如果拿不到task(即firstTask == null 或 getTask() == null),则会退出自旋,进入finally代码块。finally中会调用processWorkerExit方法,注销当前Worker,实现worker的销毁。对keepAliveTime的使用,就在getTask()方法中,这个在后面讲解。
    在这里插入图片描述

  • 3.getTask 怎么使用 keepAliveTime
    (1)首先也是一个自旋,当allowCoreThreadTimeout(运行空闲核心线程超时) 或 wc>corePoolSize(当前线程数量大于核心线程数量) 时,timed会标识为true,表示需要进行超时判断。
    (2)当wc(当前工作者数量)大于 最大线程数 或 空闲线程的空闲时间大于keepAliveTime(timed && timeout),以及wc>1或(workQueue)任务队列为空时,会进入compareAndDecrementWorkerCount方法,对wc的值减1。
    (3)当compareAndDecrementWorkerCount方法返回true时,则getTask方法会返回null,终止getTask方法的自旋。这时候回到runWorker方法,就会进入到processWorkerExit方法,进行销毁worker。
    在这里插入图片描述

  • 4.compareAndDecrementWorkerCount中操作的是ctl属性:
    (1)ctl是中心控制器,一个AtomicInteger类型的整数,通过数字的二进制编码的位进行分段,不同的二进制位段表示有不同的含义。
    (2)在ctl中,低29为表示线程池的容量,即线程池最大容量为 536870911 = 000 11111111111111111111111111111。
    在这里插入图片描述

	/*** The main pool control state, ctl, is an atomic integer packing* two conceptual fields*   workerCount, indicating the effective number of threads*   runState,    indicating whether running, shutting down etc*/private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));// COUNT_BITS = 29private static final int COUNT_BITS = Integer.SIZE - 3;// CAPACITY = 536870911 = 000 11111111111111111111111111111private static final int CAPACITY   = (1 << COUNT_BITS) - 1;private static int workerCountOf(int c)  { return c & CAPACITY; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPPO数据中台之基石:基于Flink SQL构建实数据仓库

本文整理自 2019 年 4 月 13 日在深圳举行的 Flink Meetup 会议&#xff0c;分享嘉宾张俊&#xff0c;目前担任 OPPO 大数据平台研发负责人&#xff0c;也是 Apache Flink contributor。本文主要内容如下&#xff1a; OPPO 实时数仓的演进思路&#xff1b;基于 Flink SQL 的扩…

如何实现7*24小时灵活发布?阿里技术团队这么做

研发效能分为两块&#xff0c;一是用技术的更新来提升效率&#xff1b;二是提高整个技术生态中的协同效率&#xff0c;激发技术活力。阿里巴巴技术团队在此基础上要实现的终极目标是打造7*24小时灵活发布的通道&#xff0c;以及提供更快的业务代码迭代能力。今天&#xff0c;阿…

不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...

作者 | chen_01_c责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于视觉中国hadoop介绍Hadoop 是 Lucene 创始人 Doug Cutting&#xff0c;根据 Google 的相关内容山寨出来的分布式文件系统和对海量数据进行分析计算的基础框架系统&#xff0c;其中包含 MapReduce 程序&#…

数据科学家是个性感的工作?我信你个鬼!

数据科学家40%是个吸尘器&#xff0c;40%是个清洁工&#xff0c;剩下20%是个算命的。作者 | Jingles译者 | 香槟超新星&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;根据《哈佛商业评论》的说法&#xff0c;数据科学家是21世纪最性感的工作。在现在这…

深入搜索引擎原理

之前几段工作经历都与搜索有关&#xff0c;现在也有业务在用搜索&#xff0c;对搜索引擎做一个原理性的分享&#xff0c;包括搜索的一系列核心数据结构和算法&#xff0c;尽量覆盖搜索引擎的核心原理&#xff0c;但不涉及数据挖掘、NLP等。文章有点长&#xff0c;多多指点~~ 一…

印度版的“大众点评”如何将 Food Feed 业务从 Redis 迁移到 Cassandra

Zomato 是一家食品订购、外卖及餐馆发现平台&#xff0c;被称为印度版的“大众点评”。目前&#xff0c;该公司的业务覆盖全球24个国家&#xff08;主要是印度&#xff0c;东南亚和中东市场&#xff09;。本文将介绍该公司的 Food Feed 业务是如何从 Redis 迁移到 Cassandra 的…

利用Packer自定义镜像创建容器集群

阿里云容器服务Kubernetes集群支持CentOS操作系统&#xff0c;在绝大多数情况下可以满足客户的要求。但是有些客户由于业务系统对操作系统依赖比较高&#xff0c;希望定制化一些操作系统参数&#xff0c;则可以用自定义镜像来创建Kubernetes集群。 创建自定义操作系统镜像有两…

“远程”、“协作”风靡之际,你对TA知晓多少?

作者|晶少 转载|CSDN博客 2.4亿人在线使用文档协作无延宕…… 6万名武汉中小学生实力打造“远程课堂”活学高效…… 疫情以来&#xff0c;“远程”、“协作”持续大热&#xff0c;此局毋庸置疑。 根据QuestMobile最新发布的《2020中国移动互联网“战役”专题报告》显示&am…

蚂蚁金服OceanBase性价比是传统数据库的十倍

200名数据库领域从业三年以上的会员投票和专业的评委评选&#xff0c;在如此严苛的条件之下&#xff0c;蚂蚁金服金融级分布式关系数据库OceanBase 2.0依然获得了专家评审团的一致青睐&#xff0c;荣获2019中国数据库技术大会的“年度最佳创新产品”奖。 蚂蚁金服资深总监韩鸿源…

战疫内外,京东智联云如此“一鸣惊人”!

作者|晶少 转载|CSDN博客 鼠年春节&#xff0c;一场疫情突如其来地打破了人们平静的生活&#xff1b;但在滨州&#xff0c;一款名为“疫情助手”的上线软件却为滨州市民的疫情生活带来“雪中送炭”的丝丝温情&#xff0c;细微知著中人们深深感受到了京东诠释而来的“ABCDE”技…

亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型

背景 互联网快速发展的今天&#xff0c;社交类应用、消息类功能大行其道&#xff0c;占据了大量网络流量。大至钉钉、微信、微博、知乎&#xff0c;小至各类App的推送通知&#xff0c;消息类功能几乎成为所有应用的标配。根据场景特点&#xff0c;我们可以将消息类场景归纳成三…

SLS机器学习最佳实战:日志聚类+异常告警

0.文章系列链接 SLS机器学习介绍&#xff08;01&#xff09;&#xff1a;时序统计建模SLS机器学习介绍&#xff08;02&#xff09;&#xff1a;时序聚类建模SLS机器学习介绍&#xff08;03&#xff09;&#xff1a;时序异常检测建模SLS机器学习介绍&#xff08;04&#xff09;…

大数据成长之路:谈谈那些必须学习的Linux基础知识

作者| Roy瑞士责编| Carol封图| CSDN│下载于视觉中国这里主要介绍学习大数据过程中用到的Linux基础知识&#xff0c;现在主攻的方向是大数据开发&#xff0c;欢迎大家共同交流。环境推荐安装VMware虚拟机并安装CentOS操作系统&#xff0c;具体资源的下载和安装可以查到&#x…

数据可用不可见!揭秘蚂蚁区块链摩斯安全计算平台

“数据安全”与“隐私泄漏”制约数字经济长期发展 在新的商业智能时代&#xff0c;已形成广泛的共识&#xff1a;数据是最基础的生产资料&#xff0c;各个行业与企业对于数据的利用也步入成熟期。可见的未来&#xff0c;数据利用的深度和广度将进一步升级&#xff0c;进入跨机…

如何与亦敌亦友的 null 说拜拜?大神原来是这么做的!

作者| 沉默王二责编| Carol封图| CSDN│下载于视觉中国从 10 年前我开始写第一行 Java 代码至今&#xff0c;一直觉得 null 在 Java 中是一个最特殊的存在&#xff0c;它既是好朋友&#xff0c;可以把不需要的变量置为 null 从而释放内存&#xff0c;提高性能&#xff1b;它又是…

K8s中Pod健康检查源代码分析

了解k8s中的Liveness和Readiness Liveness: 表明是否容器正在运行。如果liveness探测为fail&#xff0c;则kubelet会kill掉容器&#xff0c;并且会触发restart设置的策略。默认不设置的情况下&#xff0c;该状态为success. Readiness: 表明容器是否可以接受服务请求。如果re…

CSE:阿里在线应用如何演进成Serverless架构

Cloud Service Engine&#xff0c;简称CSE&#xff0c;是中间件部门研发的面向通用Serverless计算的中间件产品&#xff0c;目标是具备AWS Lambda的各种优势&#xff0c;同时可以解决AWS Lambda的关键技术缺陷。 AWS Lambda如果用于核心业务&#xff0c;可能会有以下缺陷&…

郫都区计算机学校,成都郫县好升学的计算机学校有哪些

【郫县好一、成都郫县希望1.成都郫县希望职业学校/招生代码&#xff1a;512632.成都郫县希望职业学校/学校简介&#xff1a;成都郫县希望职业学校学校是由郫都区教育局批准成立的&#xff0c;由希望集团投资创办的一所全日制、专业化的民办中等职业学校, 由郫都区教育局主管。学…

技术大佬:今年还学Python,傻了吧? 网友:就你敢说!

随着AI的兴起&#xff0c;Python彻底火了。据Stack Overflow调研报告&#xff1a;Python的月活用户已超越了Java、成为第一&#xff0c;全民Python已为“大势所趋”。那么&#xff0c;程序员有必要追捧Python吗&#xff1f;Python的真香是真香吗&#xff1f;技术大佬&#xff1…

基于Tablestore的Wifi设备监管系统架构实现

Wifi设备监管 某知名跨国公司&#xff0c;在全球范围内拥有大量园区&#xff0c;园区内会有不同部门的同事在一起办公。每个园区内都要配备大量的Wifi设备从而为园区同事提供方便的上网服务。因此&#xff0c;集团需要一套完善的监管系统维护所有的Wifi设备。 公司通过监管系…