惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
WordPress大学
WordPress大学
博客园_首页
罗磊的独立博客
D
Docker
N
Netflix TechBlog - Medium
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
D
DataBreaches.Net
I
InfoQ
L
LangChain Blog
GbyAI
GbyAI
V
V2EX
博客园 - 聂微东
P
Proofpoint News Feed
博客园 - 【当耐特】
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
U
Unit 42
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏

博客园 - CharyGao

IntelliJ IDEA 从卡顿到起飞,只用改这些。。。 Spring 解决循环依赖为什么需要三级缓存,而不是两级缓存? SpringBoot服务优雅停机 Java 对接全球股票实时报价:高可用架构与异常处理 OpenAI Codex AI降智解决方案, 原因解析与系统提示词修改指南 OpenClaw vs Coze/Dify/n8n 帮你半小时内选对合适的AI Skills 热潮过去后,我重新理解了 AI Agent 的方向 智读致用|《埃隆之书》 《一人企业》 一人公司:The Agency 免费“雇佣“144个AI专家,虚拟团队走进现实 用微软Agent Framework打造智能博客生成系统+AI智能体军团 告别加班(第二期):月报还是Word排版?本地AI解您愁 居然可以在 Claude 桌面端用三方模型了! Claude Code 每次启动都要确认权限?一行配置永久解决 98.5% 的人都不知道:SSH 居然还有个“隐藏菜单” 强程序员在 AI 时代的赚钱路径 骚操作来了!Claude编程的42个实战技巧大全 面试官:“简历写着熟练使用 Claude Code,连 simplify 代码审查命令都不知道!”,我:“那又如何呢?” SpringBoot+ResponseBodyEmitter异步流式推送神技 加密后的数据如何进行模糊查询? 最适合新手安装的10个小龙虾🦞 skills来了! 周末和孩子必看的亲子电影合集,陪伴孩子成长的每一步 拒绝代码泄露与“屎山”迷航:GitNexus纯本地知识图谱+可视化关系网,引发GitHub 8800星狂欢 还原BatchEncryption(201610版本)混淆的批处理文件 用上这个Skill,你的Claude Code/Codex 将会比别人快5倍 -- 用分布式思维驯服AI任务编排 前端项目中定义vs code要安装的插件 vscode中claude code插件代理地址设置 2026新手必学:GPT-5.5高效提示词指南 解决 URLEncoder.encode 编码空格变 + 号 Springboot通过谷歌Kaptcha 组件,生成图形验证码
SpringBoot多线程池配置
charygao1990 · 2026-05-06 · via 博客园 - CharyGao

image

在 Spring Boot 的 Web 容器中,完全可以维护多个线程池,这是一种非常常见的架构设计。不同业务场景对线程模型的需求不同,通过隔离线程池可以避免相互影响,提升系统的稳定性和可观测性。

以下是 Web 容器内常见的几种线程池及其用途:

1. 通用业务线程池

处理非阻塞、可异步化的业务逻辑 

 
  1. public class ThreadPoolConfig {

  2. @Bean("businessExecutor")

  3. public ThreadPoolTaskExecutor businessExecutor() {

  4. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

  5. executor.setCorePoolSize(10);

  6. executor.setMaxPoolSize(20);

  7. executor.setQueueCapacity(100);

  8. executor.setThreadNamePrefix("business-");

  9. executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

 

2. IO 密集型线程池

适用于大量 IO 操作(数据库查询、HTTP 调用、文件读写等),通常设置较大的线程数。

 
  1. public ThreadPoolTaskExecutor ioExecutor() {

  2. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

  3. executor.setCorePoolSize(50);

  4. executor.setMaxPoolSize(100);

  5. executor.setQueueCapacity(500);

  6. executor.setThreadNamePrefix("io-");

 

3. CPU 密集型线程池

适用于计算密集型任务,线程数通常设置为 CPU 核心数。

 
  1. public ThreadPoolTaskExecutor cpuExecutor() {

  2. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

  3. int processors = Runtime.getRuntime().availableProcessors();

  4. executor.setCorePoolSize(processors);

  5. executor.setMaxPoolSize(processors);

  6. executor.setThreadNamePrefix("cpu-");

 

4. 定时任务线程池

处理 @Scheduled 注解的定时任务,可以独立配置。

 
  1. @Bean("scheduledExecutor")

  2. public ThreadPoolTaskScheduler scheduledExecutor() {

  3. ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();

  4. scheduler.setPoolSize(10);

  5. scheduler.setThreadNamePrefix("scheduled-");

 

5. 异步事件处理线程池

用于 @Async 异步方法或应用事件监听器的处理。

 
  1. public ThreadPoolTaskExecutor asyncExecutor() {

  2. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

  3. executor.setCorePoolSize(5);

  4. executor.setMaxPoolSize(10);

  5. executor.setQueueCapacity(50);

  6. executor.setThreadNamePrefix("async-");

 

6. Web 容器自身线程池

Tomcat/Jetty/Undertow 处理 HTTP 请求的线程池,可在配置文件中调整:

 
 

7. 数据库连接池

虽然不是线程池,但 HikariCP 等连接池也维护着工作线程,需要合理配置。

 
  1. connection-timeout: 30000

 

最佳实践建议

  1. 线程池隔离:将 IO 密集型、CPU 密集型、定时任务等不同负载类型的任务分配到不同的线程池

  2. 命名规范:为每个线程池设置有意义的名称前缀,便于问题排查

  3. 监控告警:对核心线程池添加监控,关注活跃线程数、队列大小、拒绝任务数等指标

  4. 拒绝策略:根据业务场景选择合适的拒绝策略:

    • CallerRunsPolicy:降级,由调用线程执行

    • AbortPolicy:抛出异常

    • DiscardPolicy:静默丢弃

    • DiscardOldestPolicy:丢弃最旧的任务

  5. 优雅关闭:在应用关闭时确保线程池正确关闭,避免数据丢失

 
  1. businessExecutor().shutdown();

 

通过合理配置多个线程池,可以让 Spring Boot 应用更好地应对复杂业务场景,提升系统的吞吐量和稳定性。

SpringBoot多线程池配置_是 spring boot 2.3.7 tomcat线程池配置-CSDN博客