线程池学习之执行流程、拒绝策略、线程池状态

线程池(Thread Pool)是一种管理和复用线程的机制,它在多线程编程中被广泛使用,主要目的是提高线程的利用率和性能,减少线程创建和销毁的开销。线程池的执行流程通常包括提交任务、判断当前存活线程数是否小于核心线程数、判断工作队列是否已满、判断当前存活线程数是否达到最大线程数、任务执行与线程回收几个步骤;

一、线程池执行流程

1、提交任务

当出现一个新的线程任务时,线程池会尝试分配一个空闲线程来执行该任务。

2、判断当前存活线程数是否小于核心线程数

如果线程池中不存在空闲线程,则线程池会判断当前“存活线程数”是否小于核心线程数;

小于核心线程数:如果当前存活线程数小于核心线程数(corePoolSize),线程池会创建一个新的核心线程,用来处理新任务。
大于核心线程数:如果当前存活线程数大于核心线程数,线程池会进入下一步判断。

3、判断工作队列是否已满

未满:如果工作队列(用于存储等待执行的任务)未满,线程池会将新任务放入工作队列中等待,等线程池中出现空闲线程时,再按照“先进先出”的规则分配执行。
已满:如果工作队列已满,线程池会进入下一步判断。

4、判断当前存活线程数是否达到最大线程数

小于最大线程数:如果当前存活线程数小于最大线程数(maximumPoolSize),线程池会创建一个新的非核心线程来执行新任务。
等于或大于最大线程数:如果当前存活线程数已经达到或超过最大线程数,线程池会采用拒绝策略来处理新任务。

二、常见的拒绝策略

AbortPolicy:直接抛出RejectedExecutionException异常,阻止系统正常运行(默认策略)。
CallerRunsPolicy:用调用者所在线程来执行任务,不会抛出异常。
DiscardPolicy:不处理该任务,直接丢弃掉。
DiscardOldestPolicy:丢弃最老的未处理的任务请求。
自定义拒绝策略:实现RejectedExecutionHandler接口,自定义任务被拒绝时的处理逻辑。

三、线程池的状态

线程池的状态分为以下几种:

RUNNING:运行状态,线程池一旦被创建就处于RUNNING状态,该状态的线程池会接受新任务,并处理工作队列中的任务。调用线程池的shutdown()方法,可以切换到SHUTDOWN关闭状态;调用线程池的shutdownNow()方法,可以切换到STOP停止状态。
SHUTDOWN:关闭状态,该状态线程池不会接收新任务,但会处理工作队列中的任务。当工作队列为空时,并且线程池中执行的任务也为空时,线程池会进入TIDYING()状态。
STOP:停止状态,该状态不会接收新任务,也不会处理阻塞队列中的任务,而且会中断正在运行的任务;线程池中执行的任务为空,进入TIDYING状态。
TIDYING:整理状态,所有任务已运行终止。terminated执行完毕,进入TERMINATED状态。
TERMINATED:终止状态,该线程池彻底关闭。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

笔试题11 -- 装箱问题(01背包)

装箱问题(01背包) 文章目录 装箱问题(01背包)一、原题复现二、思路剖析三、示例代码 题目链接:NOIP2001装箱问题 一、原题复现 题目描述 有一个箱子容量为V(正整数,0 ≤ V ≤ 20000)…

【D3.js in Action 3 精译_038】4.2 D3 折线图的绘制方法及曲线插值处理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

测试-正交表与工具pairs的介绍使用(1)

目录 正交表 生成正交表 步骤 实操 注意事项 编写测试用例 根据正交表编写测试用例 补充遗漏的重要测试用例 正交表 关于长篇大论也不多介绍了,我们只需要知道正交法的⽬的是为了减少⽤例数⽬,⽤尽量少的⽤例覆盖输⼊的两两组合 正交表的构成&…

抗晃电马达保护器在工业厂房中的应用

安科瑞刘鸿鹏 摘要 随着工业自动化水平的提高,生产线上电动机作为关键设备的使用频率不断增加。然而,工厂生产环境中的电力波动,尤其是晃电现象,会对电动机的正常运转造成干扰,甚至导致设备停机和生产中断。抗晃电型…

linux之调度管理(2)-调度器 如何触发运行

一、调度器是如何在程序稳定运行的情况下进行进程调度的 1.1 系统定时器 因为我们主要讲解的是调度器,而会涉及到一些系统定时器的知识,这里我们简单讲解一下内核中定时器是如何组织,又是如何通过通过定时器实现了调度器的间隔调度。首先我们…

RHCE循环执行的例行性任务--crontab(周期性)

1.每分钟执行命令 2.每小时执行 3.每天凌晨3点半和12点半执行脚本 4.每隔6小时,相当于6,12,18,24点半执行脚本 5.30半点,8-18/2表示早上8点到下午18点之间每隔2小时执行脚本代表 6.每天晚上9点30重启nginx 7.每月1号和10号4点45执行脚本 8. 每周六和周日…

ETLCloud异常问题分析ai功能

在数据处理和集成的过程中,异常问题的发生往往会对业务运营造成显著影响。为了提高ETL(提取、转换、加载)流程的稳定性与效率,ETLCloud推出了智能异常问题分析AI功能。这一创新工具旨在实时监测数据流动中的潜在异常,自…

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 基于Spring Boot的个人云盘管理系统设计…

还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!

前言 程序员的终极追求是什么?当系统流量大增,用户体验却丝滑依旧?没错!然而,在大量文件传输、数据传递的场景中,传统的“数据搬运”却拖慢了性能。为了解决这一痛点,Linux 推出了 零拷贝 技术&…

密码学是如何保护数据传输的安全性?

密码学通过一系列算法和协议来保护数据传输的安全性。 一、加密技术 对称加密算法 原理:使用相同的密钥进行加密和解密。应用:在数据传输过程中,发送方和接收方共享一个密钥,数据在传输前被加密,接收方使用相同的密钥…

python怎么打开py文件

1、首先在资源管理器里复制一下py文件存放的路径,按下windows键+r,在运行里输入cmd,回车打开命令行: 2、在命令行里,先切换到py文件的路径下面,接着输入“python 文件名.py ”运行python文件&a…

云计算——ACA学习 云计算核心技术

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 写在前面 本系列将会持续更新云计算阿里云ACA的学习,了解云计算及网络安全相关…

企业办公管理软件排名 | 九款企业管理软件助你制胜职场!(好用+实用+全面)

在寻找合适的企业办公管理软件时,你是否感到困惑不已,不知道从众多选项中选择哪一个? 一款好的管理软件不仅能简化工作流程,还能增强数据安全性,优化决策支持。 以下是九款备受推崇的企业管理软件,它们将助…

DNS服务器

DNS服务器 1、简介 DNS域名解析服务器,它作为将域名和IP地址相互映射的一个分布式数据库,端口号为53,通常使用UDP协议,但是在没有查询到完整的信息时,会以TCP这个协议来重新查询,所以在启动NDS服务器时&a…

顾荣辉在新加坡金融科技节发表主旨演讲:安全不仅是竞争优势,更是共同责任

在全球数字化和去中心化进程中,Web3的作用日益凸显,安全问题也日益成为行业的焦点。在这一背景下,顾荣辉教授于新加坡金融科技节(SFF)上发表主旨演讲《超越代码,引领信任》。顾教授在演讲中深入阐述了安全在…

Leetcode328奇偶链表,Leetcode21合并两个有序链表,Leetcode206反转链表 三者综合题

题目描述 思路分析 这题的思路就和我们的标题所述一样,可以看作是这3个题的合并,但是稍微还有一点点区别 比如:奇偶链表这道题主要是偶数链在了奇数后面,字节这个的话是奇偶链表分离了 所以字节这题的大概思路就是: …

「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建

本篇详细介绍在Mac系统上快速搭建Cangjie开发环境的步骤,涵盖VSCode的下载与安装、Cangjie插件的离线安装、工具链的配置及验证。通过这些步骤,确保开发环境配置完成,为Cangjie项目开发提供稳定的基础支持。 关键词 Cangjie开发环境搭建VSC…

2023数学分析【南昌大学】

计算 求极限 lim ⁡ n → ∞ ( 1 n 2 + 1 2 + 1 n 2 + 2 2 + ⋯ + 1 n 2 + n 2 ) \mathop{\lim }\limits_{n \to \infty } \left( \frac{1}{{\sqrt {n^2 + 1^2} }} + \frac{1}{{\sqrt {n^2 + 2^2} }} + \cdots + \frac{1}{{\sqrt {n^2 + n^2} }} \right) n→∞lim​(n2+12 ​1…

从技术创新到商业应用,智象未来(HiDream.ai)创新不止步

在人工智能领域的最新动态中,智象未来(HiDream.ai)公司,作为全球领先的多模态生成式人工智能技术先驱,已经引起了广泛的行业瞩目。该公司专注于深度学习和计算机视觉技术的融合,致力于开发和优化视觉多模态…

ssm基于Vue的戏剧推广网站+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 1 第2…