java线程池讲解!核心参数

创建方式 | 构造方法
Executor构造方法

存放线程的容器:

 private final HashSet<Worker> workers = new HashSet<Worker>();

构造方法:

 public ThreadPoolExecutor(int corePoolSize,
                           int maximumPoolSize,
                           long keepAliveTime,
                           TimeUnit unit,
                           BlockingQueue<Runnable> workQueue,
                           ThreadFactory threadFactory,
                           RejectedExecutionHandler handler)

参数介绍:

救急线程(临时工)在阻塞队列满了才会创建,和核心线程最大的区别就是有个最大生存时间。----【会让核心线程一直运行】

  • 线程池的线程都是非守护线程?【不会随着主线程的结束而结束】

  • 救急线程的概念是在有界队列的前提下

  • corePoolSize:核心线程数,定义了最小可以同时运行的线程数量

  • maximumPoolSize:最大线程数,当队列中存放的任务达到队列容量时,当前可以同时运行的数量变为最大线程数,创建救急线程并立即执行最新的任务,与核心线程数之间的差值又叫救急线程数 -----【核心 + 救急 = 最大】

  • keepAliveTime:救急线程最大存活时间,当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等到 keepAliveTime 时间超过销毁

  • unit:keepAliveTime 参数的时间单位 ----【救急线程】

  • workQueue:阻塞队列,存放被提交但尚未被执行的任务

  • threadFactory:线程工厂,创建新线程时用到,可以为线程创建时起名字。【重写线程工厂内部方法不止是起名字的作用,还有线程组、守护线程、优先级等概念】负责创建线程

    • ThreadFactory接口有一个方法newThread(Runnable r),该方法用于创建新线程。

  • handler:拒绝策略,线程到达最大线程数仍有新任务时会执行拒绝策略。---【即核心线程和救急线程都处于繁忙才会进入拒绝策略,和自定义线程池不一样】

    RejectedExecutionHandler 下有 4 个实现类:

    • AbortPolicy:让调用者抛出 RejectedExecutionException 异常,默认策略

    • CallerRunsPolicy:让调用者运行的调节机制,将某些任务回退到调用者,从而降低新任务的流量

    • DiscardPolicy:直接丢弃任务,不予任何处理也不抛出异常

    • DiscardOldestPolicy:放弃队列中最早的任务,把当前任务加入队列中尝试再次提交当前任务

    补充:其他框架拒绝策略

    • Dubbo:在抛出 RejectedExecutionException 异常前记录日志,并 dump 线程栈信息,方便定位问题 ---【扩展AbortPolicy】

    • Netty:创建一个新线程来执行任务

    • ActiveMQ:带超时等待(60s)尝试放入队列

    • PinPoint:它使用了一个拒绝策略链,会逐一尝试策略链中每种拒绝策略 ---【责任链模式】

工作原理:

  1. 创建线程池,这时没有创建线程(懒惰),等待提交过来的任务请求,调用 execute 方法才会创建线程

  2. 当调用 execute() 方法添加一个请求任务时,线程池会做如下判断:

    • 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务

    • 如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列

    • 如果这时队列满了且正在运行的线程数量还小于 maximumPoolSize,那么会创建救急线程立刻运行这个任务,对于阻塞队列中的任务不公平。这是因为创建每个 Worker(线程)对象会绑定一个初始任务,启动 Worker 时会优先执行

    • 如果队列满了且正在运行的线程数量大于或等于 maximumPoolSize,那么线程池会启动饱和拒绝策略来执行。【完全承载不了,迫不得已才会进入拒绝策略

  3. 当一个线程完成任务时,会从队列中取下一个任务来执行

  4. 当一个线程空闲超过一定的时间(keepAliveTime)时,线程池会判断:如果当前运行的线程数大于 corePoolSize,那么这个线程就被停掉,所以线程池的所有任务完成后最终会收缩到 corePoolSize 大小【只会停掉救急线程

总结

  • 线程池中刚开始没有线程,当一个任务提交给线程池后,线程池会创建一个新线程来执行任务。

  • 当线程数达到 corePoolSize 并没有线程空闲,这时再加入任务,新加的任务会被加入workQueue 队列排队,直到有空闲的线程。

  • 如果队列选择了有界队列,那么任务超过了队列大小时,会创建 maximumPoolSize - corePoolSize 数目的线程来救急。【tomcat线程池对这里进行了扩展?

  • 如果线程到达 maximumPoolSize 仍然有新任务这时会执行拒绝策略。拒绝策略 jdk 提供了 4 种实现,其它著名框架也提供了实现

  • 当高峰过去后,超过corePoolSize 的救急线程如果一段时间没有任务做,需要结束节省资源,这个时间由keepAliveTime 和 unit 来控制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Covalent 承诺向 Consensys Builders Scale 提供 250 万美元资助

作为 Web3.0 领域主要的模块化数据基础设施层 Covalent Network&#xff08;CQT&#xff09;承诺向「Consensys Builders Scale 计划」提供 250 万美元的资助&#xff0c; 用于助力 Consensys 生态的发展。这一重大举措体现了 Covalent Network&#xff08;CQT&#xff09;的使…

Windows defender bypass | 免杀

官方文档 在制作免杀的过程中,翻找 Windows 官方对 Windows Defender 的介绍,发现有这样一个目录:Configure Microsoft Defender Antivirus exclusions on Windows Server(在 Windows server 中配置defender排除项)。 https://docs.microsoft.com/en-us/microsoft-365/se…

200元的5G热点机能作为渗透测试测试机,还能当128G移动硬盘,怎么算都值

最近&#xff0c;迫于很多的app渗透测试&#xff0c;急需一个真机&#xff0c;在咸鱼上发现了一款低价5G手机&#xff0c;平时可以当随身WiFi&#xff0c;还可以进行app渗透测试&#xff0c;它就是中兴远航30。 中兴远航30是2022年4月发布的机器&#xff0c;全系只有4G128G和6G…

CBoard开源数据可视化工具

CBoard开源数据可视化工具 文章目录 CBoard开源数据可视化工具介绍资源列表基础环境一、安装JDK二、安装Maven2.1、安装Maven2.2、配置Maven 三、安装Tomcat8四、安装MySQL5版本4.1、安装相关依赖4.2、二进制安装4.3、设定配置文件4.4、配置systemcatl方式启动4.5、访问MySQL数…

从大型语言模型到大脑语言理解:探索话语理解的神经机制

随着科技的飞速发展&#xff0c;人工智能领域取得了令人瞩目的成就。在这其中&#xff0c;大型语言模型&#xff08;LLMs&#xff09;以其卓越的性能和广泛的应用前景&#xff0c;成为了当前研究的热点。然而&#xff0c;尽管LLMs在文本生成、语言翻译等领域展现出了惊人的能力…

使用pnpm创建vue3项目

https://pnpm.io/zh/ 全局安装&#xff1a; npm install -g pnpm 检查版本&#xff1a; pnpm -v 创建vue3项目&#xff1a; pnpm create vuelatest 项目装包&#xff1a; pnpm install 运行项目&#xff1a; pnpm dev 命令行&#xff1a; https://pnpm.io/zh/pnpm-cli pnpm …

codegeex2-6b-int4 部署

codegeex2-6b-int4 模型文件 CodeGeeX2 仓库文件地址 CodeGeeX2 推理教程 conda create -n codegeex2 python3.10 -y conda activate codegeex2 pip install -r requirements.txt -i https://pypi.mirrors.u…

2024中国翻译行业发展报告

来源&#xff1a;中国翻译协会 近期历史回顾&#xff1a; 2024国内工商业储能市场研究报告.pdf 2023幸福企业白皮书.pdf 2024年欧亚地区移动经济报告.pdf 内容供应链变革 2023人工智能与首席营销官&#xff08;CMO&#xff09; AI科技对PC产业的影响.pdf 金融业数据应用发展报…

Science Advances|用于胃部pH监测和早期胃漏检测的生物可吸收无线无源柔性传感器(健康监测/柔性传感/柔性电子)

2024年4月19日,美国西北大学 John A. Rogers和中国科学技术大学吕頔(Di Lu)团队,在《Science Advances》上发布了一篇题为“Bioresorbable, wireless, passive sensors for continuous pH measurements and early detection of gastric leakage”的论文。论文内容如下: 一、…

防火墙对于企业究竟起到哪些作用?

在当今数字化时代&#xff0c;企业网络安全已成为关乎企业生存与发展的战略要务。防火墙作为网络安全的基石&#xff0c;对于构建企业网络的安全防护体系至关重要。本文将深入剖析防火墙在企业网络安全中的多重价值&#xff0c;并结合具体案例&#xff0c;探讨如何科学运用防火…

如何通过 6 种方法从 iPhone 恢复已删除的文件

想知道如何从 iPhone 恢复已删除的文件吗&#xff1f;本文将指导您如何从 iPhone 恢复数据&#xff0c;无论您是否有 iTunes/iCloud 备份。 iPhone 上已删除的文件去哪儿了&#xff1f; 许多 iPhone 用户抱怨他们经常丢失 iPhone 上的一些重要文件。由于意外删除、iOS 更新失败…

工作手机安全管理平台建设方案

第一章 项目背景 移动互联网的时代&#xff0c;各个行业在在推进移动办公和掌上办公&#xff0c;通过智能手机、平板电脑等进行线上办公&#xff0c;这样能提高了企业人员的办公效率&#xff0c;从而为客户提供更及时的服务。 在移动办公提高了工作人员办公效率的同时&#xf…

区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测

区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测 目录 区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测效果一览基本介绍程序设计参考资…

如何合并pdf文件到一个pdf

在现代办公和学习中&#xff0c;PDF格式的文件因其跨平台兼容性和安全性得到了广泛应用。然而&#xff0c;有时我们需要将多个PDF文件合并成一个&#xff0c;以便于管理和分享。本文将详细介绍几种合并PDF的方法&#xff0c;帮助读者轻松完成PDF文件的合并工作。 首先通过浏览器…

CV每日论文--2024.6.14

1、ICE-G: Image Conditional Editing of 3D Gaussian Splats 中文标题&#xff1a;ICE-G&#xff1a;3D 高斯斑点的图像条件编辑 简介&#xff1a;近年来,出现了许多技术来创建高质量的3D资产和场景。然而,当涉及到这些3D对象的编辑时,现有方法要么速度慢、要么牺牲质量,要么…

【免费Web系列】大家好 ,今天是Web课程的第二十天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 部门管理 在前面的课程中&#xff0c;我们学习了Vue工程化的基础内容、TS、ElementPlus&#xff0c;那接下来呢&#xff0c;我们要通过一个案例&#xff0c;加强大家对于Vue项目的理解&#xff0c;并掌握…

2024年全国青少信息素养大赛python编程复赛集训第二天编程题分享

整理资料不容易,感谢各位大佬给个点赞和分享吧,谢谢 大家如果不想阅读前边的比赛内容介绍,可以直接跳过:拉到底部看集训题目 (一)比赛内容: 【小学组】 1.了解输入与输出的概念,掌握使用基本输入输出和简单运算 为主的标准函数; 2.掌握注释的方法; 3.掌握基本数…

三极管的厄利效应(early effect)

詹姆斯M厄利(James M. Early)发现的现象&#xff0c;厄利效应&#xff08;英语&#xff1a;Early effect&#xff09;&#xff0c;又译厄尔利效应&#xff0c;也称基区宽度调制效应&#xff0c;是指当双极性晶体管&#xff08;BJT&#xff09;的集电极&#xff0d;射极电压VCE改…

并联谐振回路

等效电路 阻抗 电阻 电抗 导纳 电导 电纳 阻抗 * 导纳 电阻 * 电导 电抗 * 电纳 1 谐振的时候&#xff0c;导纳为Rp&#xff0c;Rp与损耗电阻R成反比&#xff0c;损耗电阻R较小&#xff0c;则Rp较大&#xff0c;电导的倒数才是电阻&#xff0c;阻抗特性与串谐对偶 谐…

HTML+CSS 动态卡片

效果演示 实现了一个带有动态背景和图片放大效果的卡片展示。卡片的背景是由两种颜色交替组成的斜线条纹&#xff0c;同时背景会以一定速度循环滚动。当鼠标悬停在卡片上时&#xff0c;卡片的图片会放大&#xff0c;并且卡片的背景会变为彩色。 Code HTML <!DOCTYPE html&…