【Springboot】Springboot 自定义线程池的参数配置最优是多少

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌

技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。

感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我留言咨询,希望帮助更多的人。

Springboot 自定义线程池的参数配置最优是多少

  • 一、核心参数
  • 二、参数配置建议
    • 2.1 corePoolSize
    • 2.2 maxPoolSize
    • 2.3 queueCapacity
    • 2.4 keepAliveTime
    • 2.5 threadNamePrefix
    • 2.6 allowCoreThreadTimeOut
  • 三、示例配置
  • 四、动态调整参数
  • 五、监控线程池
  • 六、总结

在 Spring Boot 中配置自定义线程池时,参数的设置需要根据具体的应用场景、系统资源和业务需求来调整。以下是一些常见的配置参数及其优化建议:

一、核心参数

以下是线程池的核心参数及其作用:

参数说明
corePoolSize核心线程数,线程池中始终保持存活的线程数量。
maxPoolSize最大线程数,线程池中允许的最大线程数量。
queueCapacity任务队列容量,用于存放等待执行的任务。
keepAliveTime空闲线程存活时间,超过核心线程数的空闲线程在指定时间后被回收。
threadNamePrefix线程名前缀,方便日志跟踪和监控。
allowCoreThreadTimeOut是否允许核心线程超时回收,默认 false。

二、参数配置建议

2.1 corePoolSize

  • 根据系统的 CPU 核心数和任务类型设置。

  • 对于 CPU 密集型任务,建议设置为 CPU 核心数 + 1。

  • 对于 I/O 密集型任务,可以适当增大,建议设置为 CPU 核心数 * 2。

  • 默认值:Runtime.getRuntime().availableProcessors()。

2.2 maxPoolSize

  • 根据系统的负载和任务类型设置。

  • 对于 CPU 密集型任务,不建议设置过大,避免过多线程竞争 CPU 资源。

  • 对于 I/O 密集型任务,可以适当增大,但需要考虑系统资源限制。

  • 建议设置为 corePoolSize 的 2~4 倍。

2.3 queueCapacity

  • 任务队列用于存放等待执行的任务。

  • 如果任务队列过小,可能导致任务被拒绝;如果过大,可能导致内存占用过高。

  • 建议根据任务的平均处理时间和系统负载设置。

  • 默认值:Integer.MAX_VALUE(无界队列),但建议设置为一个合理的值(如 100~1000)。

2.4 keepAliveTime

  • 空闲线程的存活时间。

  • 如果任务量波动较大,可以设置较短的存活时间,避免资源浪费。

  • 默认值:60 秒,建议根据任务特点调整(如 30~120 秒)。

2.5 threadNamePrefix

  • 设置线程名前缀,方便日志跟踪和监控。

  • 建议设置为有意义的名称,如 Async- 或 Task-。

2.6 allowCoreThreadTimeOut

  • 是否允许核心线程超时回收。

  • 如果任务量波动较大,可以设置为 true,避免空闲时占用资源。

  • 默认值:false。

三、示例配置

以下是一个典型的自定义线程池配置示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configuration
public class ThreadPoolConfig {

    @Bean(name = "customThreadPool")
    public ThreadPoolTaskExecutor customThreadPool() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 核心线程数
        executor.setCorePoolSize(10);
        // 最大线程数
        executor.setMaxPoolSize(50);
        // 任务队列容量
        executor.setQueueCapacity(100);
        // 空闲线程存活时间
        executor.setKeepAliveSeconds(60);
        // 线程名前缀
        executor.setThreadNamePrefix("Custom-Thread-");
        // 允许核心线程超时回收
        executor.setAllowCoreThreadTimeOut(true);
        // 初始化
        executor.initialize();
        return executor;
    }
}

四、动态调整参数

在实际生产环境中,线程池的参数可能需要根据系统负载动态调整。可以通过以下方式实现:

  • 使用 Spring Boot 的 @ConfigurationProperties 动态加载配置。

  • 结合监控工具(如 Prometheus、Grafana)实时监控线程池状态,动态调整参数。

五、监控线程池

为了确保线程池的稳定运行,建议监控以下指标:

  • 活跃线程数:当前正在执行任务的线程数。

  • 队列大小:等待执行的任务数量。

  • 完成任务数:线程池已完成的任务数量。

  • 拒绝任务数:因队列满或线程池关闭而被拒绝的任务数量。

  • 可以使用 Spring Boot Actuator 或 Micrometer 来暴露这些指标。

六、总结

  • 线程池的参数配置需要根据具体的应用场景和系统资源进行调整。

  • 对于 CPU 密集型任务,核心线程数应接近 CPU 核心数;对于 I/O 密集型任务,可以适当增大。

  • 任务队列容量和最大线程数需要平衡系统负载和资源占用。

  • 建议结合监控工具动态调整参数,确保线程池的稳定性和性能。

通过合理的配置和监控,可以最大化线程池的性能,同时避免资源浪费和系统崩溃。


好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 “点赞” 和 “关注” 哦,我们下次见!🎈

本文完结!

祝各位大佬和小伙伴身体健康,万事如意,发财暴富,扫下方二维码与我一起交流!!!在这里插入图片描述

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

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

相关文章

【2】Cisco SD-WAN 组件介绍

1. 概述 Cisco SD-WAN 是一套基于软件定义的广域网(SD-WAN)解决方案,能够提供安全、可扩展且高效的网络连接。它通过集中的控制和智能路径选择,实现跨多个站点的可靠性、可见性和优化。 在 Cisco SD-WAN 体系架构中,主要由四个核心组件构成: vManage(管理平面) vSmart…

测试中的第一性原理:回归本质的质量思维革命

在软件工程领域,测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境,第一性原理(First Principles Thinking)提供了独特的解题视角&#xff…

《chatwise:DeepSeek的界面部署》

ChatWise:DeepSeek的界面部署 摘要 本文详细描述了DeepSeek公司针对其核心业务系统进行的界面部署工作。从需求分析到技术实现,再到测试与优化,全面阐述了整个部署过程中的关键步骤和解决方案。通过本文,读者可以深入了解DeepSee…

机器学习在癌症分子亚型分类中的应用

学习笔记:机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题:Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊:Cancer Cell发表时间:20…

什么是AIOps?

AIOps(人工智能运维,Artificial Intelligence for IT Operations)是通过使用人工智能(AI)技术来增强 IT 运维(IT Operations)的智能化、自动化和效率的概念。它结合了机器学习、数据分析、自动化…

使用deepseek快速创作ppt

目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型,其推理能力炸裂,但是DeepSeek官方没有提供生成PPT功能,如果让DeepSeek做PPT呢? 有个途径:在DeepSeek让其深度思考做出PPT脚本&#xf…

DeepSeek 引领的 AI 范式转变与存储架构的演进

近一段时间,生成式 AI 技术经历了飞速的进步,尤其是在强推理模型(Reasoning-LLM)的推动下,AI 从大模型训练到推理应用的范式发生了剧变。以 DeepSeek 等前沿 AI 模型为例,如今的 AI 技术发展已不局限于依赖…

vscode 设置在编辑器的标签页超出可视范围时自动换行(workbench.editor.wrapTabs)

“workbench.editor.wrapTabs”: true 是 VS Code(Visual Studio Code) 的一个设置项,它的作用是 在编辑器的标签页超出可视范围时自动换行,而不是显示滚动条。 需要修改settings.json 参考:settings.json 默认值&a…

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

前端组件标准化专家Prompt指令的最佳实践

前端组件标准化专家Prompt 提示词可作为项目自定义提示词使用,本次提示词偏向前端开发的使用,如有需要可适当修改关键词和示例 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使用最好的模型,可以…

介绍10个比较优秀好用的Qt相关的开源库

记录下比较好用的一些开源库 1. Qt中的日志库“log4qt” log4qt 是一个基于 Apache Log4j 设计理念的 Qt 日志记录库,它为 Qt 应用程序提供了强大而灵活的日志记录功能。Log4j 是 Java 领域广泛使用的日志框架,log4qt 借鉴了其优秀的设计思想&#xff…

如何打造一个更友好的网站结构?

在SEO优化中,网站的结构往往被忽略,但它其实是决定谷歌爬虫抓取效率的关键因素之一。一个清晰、逻辑合理的网站结构,不仅能让用户更方便地找到他们需要的信息,还能提升搜索引擎的抓取效率 理想的网站结构应该像一棵树,…

态、势、感、知中的信息

“态、势中的信息”与“感、知中的信息”分别对应客观系统状态与主观认知过程的信息类型,其差异体现在信息的来源、性质、处理方式及作用目标上。以下通过对比框架和具体案例解析两者的区别: 态势中的信息中的态信息指系统在某一时刻的客观存在状态&…

文本生图的提示词prompt和参数如何设置(基于Animagine XL V3.1)

昨天搞了半天 Animagine XL V3.1,发现市面上很多教程只是授之以鱼,并没有授之以渔的。也是,拿来赚钱不好吗,闲鱼上部署一个 Deepseek 都能要两百块。这里我还是想写篇文章介绍一下,虽不全面,但是尽量告诉你…

基于docker搭建Kafka集群,使用内部自带的Zookeeper方式搭建

前提条件 按照【kafka3.8.0升级文档成功搭建kafka服务】 环境:192.168.2.91 192.168.2.93 并以192.168.2.91环境kafka自带的zookeeper作为协调器。 使用基于KRaft方式进行kafka集群搭建教程 搭建kafka-ui可视化工具 1、创建kafka集群节点192.168.2.91 &#xff…

GitPuk快速安装配置教程(入门级)

GitPuk是一款国产开源免费的代码管理工具,工具简洁易用,开源免费,本文将讲解如何快速安装和配置GitPuk,以快速入门上手。 1、安装 支持 Windows、Mac、Linux、docker 等操作系统。 1.1 Linux安装 以下以Centos7安装…

奖励模型中的尺度扩展定律和奖励劫持

奖励模型中的尺度扩展定律和奖励劫持 FesianXu 20250131 at Wechat Search Team 前言 最近在考古一些LLM的经典老论文,其中有一篇是OpenAI于ICML 2023年发表的文章,讨论了在奖励模型(Reward Model)中的尺度扩展规律(S…

ASP.NET Core中Filter与Middleware的区别

中间件是ASP.NET Core这个基础提供的功能,而Filter是ASP.NET Core MVC中提供的功能。ASP.NET Core MVC是由MVC中间件提供的框架,而Filter属于MVC中间件提供的功能。 区别 中间件可以处理所有的请求,而Filter只能处理对控制器的请求&#x…

力扣240 搜索二维矩阵 ll

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,…

Redis03 - 高可用

Redis高可用 文章目录 Redis高可用一:主从复制 & 读写分离1:主从复制的作用2:主从复制原理2.1:全量复制2.2:增量复制(环形缓冲区) 3:主从复制实际演示3.1:基本流程准…