Java ThreadPoolTaskExecutor 线程池的常见问题
2022/2/23 20:22:09
本文主要是介绍Java ThreadPoolTaskExecutor 线程池的常见问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
重要参数
- corePoolSize:核心线程数,常开的线程数,默认值:1。需注意:如果设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭直到关闭为0
- queueCapacity:阻塞队列(任务队列),需注意spring的默认值是Integer.MAX_VALUE,必须要手动修改,否则如果任务过多可能会造成服务的OOM
- maxPoolSize:最大线程数,默认值是Integer.MAX_VALUE
拒绝策略
-
具体使用哪种策略需要基于实际业务情况选择
- AbortPolicy():该策略是线程池的默认策略,如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。
- DiscardOldestPolicy():丢弃队列中最老的任务,队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列
- DiscardPolicy():如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常
- CallerRunsPolicy():交由调用方线程运行,比如 main 线程;如果添加到线程池失败,那么主线程会自己去执行该任务,不会等待线程池中的线程去执行
任务执行和线程创建策略
优先使用核心线程数-->>核心线程数不足-->>放入阻塞队列-->>当阻塞队列满的情况下-->>开启新的线程执行任务,直到线程数=最大线程数-->>当线程数达到最大线程数时-->>基于设置的拒绝策略处理新的任务
核心线程数怎么设置
- 分IO密集还是CPU密集(不是绝对的,是基于经验设置)
-
CPU密集设置为跟核心数一样大小
-
IO密集型设置为2倍CPU核心数(一般服务都是IO密集型)
-
-
非固定
-
根据实际情况压测进行调整,比如由调参程序员、调参算法工程师给出结论
-
这篇关于Java ThreadPoolTaskExecutor 线程池的常见问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04百万架构师第六课:设计模式:策略模式及模板模式
- 2025-01-04百万架构师第七课:设计模式:装饰器模式及观察者模式
- 2025-01-04适用于企业管理的协作工具API推荐
- 2025-01-04挑战16:被限流的CPU
- 2025-01-03企业在选择工具时,如何评估其背后的技术团队
- 2025-01-03Angular中打造动态多彩标签组件的方法
- 2025-01-03Flask过时了吗?FastAPI才是未来?
- 2025-01-0311个每位开发者都应知道的免费实用网站
- 2025-01-03从REST到GraphQL:为什么以及我是如何完成转型的
- 2025-01-03掌握RAG:从单次问答到连续对话