当前位置:网站首页>线程池参数及合理设置
线程池参数及合理设置
2022-07-05 19:38:00 【androidstarjack】
点击上方关注 “终端研发部”
设为“星标”,和你一起掌握更多数据库知识
一、线程池的7大核心参数
1. corePoolSize
核心线程数目核心线程会一直存活,及时没有任务需要执行,当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理当设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭
2. maximumPoolSize 最大线程数目
当空闲线程时间达到 keepAliveTime,线程会关闭,直到数量等于corePoolSize
3. keepAliveTime空闲时间
4. unit 时间单位
超过核心线程的生存时间单位,如秒、毫秒等。
5. workQueue 阻塞队列
LinkedBlockingQueue:无界队列,容量Integer.MAX_VALUE,(FixedThreadPool 和 SingleThreadExecutor 线程池的线程数是固定的,用的就是LinkedBlockingQueue)
SynchronousQueue:直接提交的任务队列(CachedThreadPool 的最大线程数是 Integer.MAX_VALUE,用的是SynchronousQueue)
ArrayBlockingQueue:指定队列大小(corePoolSize >队列>maximumPoolSize )
6. threadFactory 线程工厂
可以定制线程对象的创建,例如设置线程名字、是否是守护线程等。
7. handler 拒绝策略
AbortPolicy:终止策略。超过最大承载、执行拒绝任务时,会直接抛出一个类型为RejectedExecutionException 的 RuntimeException异常
CallerRunsPolicy:调用者执行策略。超过承载,执行策略时,调用者线程执行任务。
DiscardOldestPolicy:丢弃最早任务策略。超过承载,丢弃队列中最早的任务。若线程池关闭,则舍弃。
DiscardPolicy:丢弃策略。超过承载,丢弃任务。
实现RejectedExecutionHandler接口,自定义策略
二、线程池参数的合理设置
Ø tasks,程序每秒需要处理的最大任务数量
Ø tasktime,单线程处理一个任务所需要的时间
Ø responsetime,系统允许任务最大的响应时间
corePoolSize
每个任务需要tasktime秒处理,则每个线程每秒可处理1/tasktime个任务。系统每秒有tasks个任务需要处理,则需要的线程数为:tasks/(1/tasktime)。即tasks*tasktime个线程数。具体数字最好根据8020原则,即80%情况下系统每秒任务数。
queueCapacity:任务队列的长度
任务队列的长度要根据核心线程数,以及系统对任务响应时间的要求有关。队列长度可以设置为(corePoolSize/tasktime)responsetime
maxPoolSize:最大线程数
当系统负载达到最大值时,核心线程数已无法按时处理完所有任务,这时就需要增加线程。每秒200个任务需要20个线程,那么当每秒达到1000个任务时,则需要(1000-queueCapacity)*(20/200)。
keepAliveTime
keepAliveTiime设定值可根据任务峰值持续时间来设定。
以上关于线程数量的计算并没有考虑CPU的情况。若结合CPU的情况,比如,当线程数量达到50时,CPU达到100%,则将maxPoolSize设置为60也不合适,此时若系统负载长时间维持在每秒1000个任务,则超出线程池处理能力,应设法降低每个任务的处理时间(tasktime)。
写在最后的话
大家看完有什么不懂的可以在下方留言讨论,也可以私信问我一般看到后我都会回复的。最后觉得文章对你有帮助的话记得点个赞哦,点点关注不迷路
@终端研发部
每天都有新鲜的干货分享!
回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
用 Spring 的 BeanUtils 前,建议你先了解这几个坑!
lazy-mock ,一个生成后端模拟数据的懒人工具
在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!
字节跳动一面:i++ 是线程安全的吗?
一条 SQL 引发的事故,同事直接被开除!!
太扎心!排查阿里云 ECS 的 CPU 居然达100%
一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)
相信自己,没有做不到的,只有想不到的在这里获得的不仅仅是技术!
喜欢就给个“在看”
边栏推荐
- S7-200SMART利用V90 MODBUS通信控制库控制V90伺服的具体方法和步骤
- webuploader文件上传 拖拽上传 进度监听 类型控制 上传结果监听控件
- 再忙不能忘安全
- Xaas trap: all things serve (possible) is not what it really needs
- 司空见惯 - 英雄扫雷鼠
- 详解SQL中Groupings Sets 语句的功能和底层实现逻辑
- HiEngine:可媲美本地的云原生内存数据库引擎
- Password reset of MariaDB root user and ordinary user
- 全网最全的低代码/无代码平台盘点:简道云、伙伴云、明道云、轻流、速融云、集简云、Treelab、钉钉·宜搭、腾讯云·微搭、智能云·爱速搭、百数云
- Which securities company is better and which platform is safer for mobile account opening
猜你喜欢
How MySQL queries and modifies JSON data
Postman core function analysis - parameterization and test report
司空见惯 - 英雄扫雷鼠
Mariadb root用户及普通用户的密码 重置
JAD installation, configuration and integration idea
Debezium系列之:记录mariadb数据库删除多张临时表debezium解析到的消息以及解决方法
What does software testing do? What are the requirements for learning?
MMO项目学习一:预热
Necessary skills for interview in large factories, 2022android will not die, I will not fall
Millimeter wave radar human body sensor, intelligent perception of static presence, human presence detection application
随机推荐
Is it safe for China Galaxy Securities to open an account? Securities account opening
Django使用mysqlclient服务连接并写入数据库的操作过程
使用 RepositoryProvider简化父子组件的传值
Apprentissage du projet MMO I: préchauffage
【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台
Fuzor 2020軟件安裝包下載及安裝教程
软件测试是干什么的?学习有啥要求?
third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
redis集群模拟消息队列
Shell编程基础(第8篇:分支语句-case in)
全网最全的低代码/无代码平台盘点:简道云、伙伴云、明道云、轻流、速融云、集简云、Treelab、钉钉·宜搭、腾讯云·微搭、智能云·爱速搭、百数云
shell编程基础(第9篇:循环)
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
国海证券在网上开户安全吗?
The city chain technology Digital Innovation Strategy Summit was successfully held
[Collection - industry solutions] how to build a high-performance data acceleration and data editing platform
中国银河证券开户安全吗 证券开户
Reinforcement learning - learning notes 4 | actor critical
Fundamentals of shell programming (Chapter 9: loop)
Decision tree and random forest