From 2b123df3cf8d2b31605e1d4ca50b3acf655f0459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=B7=E8=A8=80?= <2439534736@qq.com> Date: Thu, 28 May 2026 15:48:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=B7=BB=E5=8A=A0=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=BC=82=E6=AD=A5=E7=BA=BF=E7=A8=8B=E6=B1=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 防止默认线程池因无界队列引发 OOM 问题 - 配置核心线程数为 10,最大线程数为 50 - 设置缓冲队列容量为 1000,避免任务堆积 - 配置空闲线程存活时间为 60 秒 - 采用 CallerRunsPolicy 拒绝策略保证任务不丢失 - 启用优雅停机配置等待任务完成 --- .../xf/basedemo/config/ThreadPoolConfig.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/java/cn/xf/basedemo/config/ThreadPoolConfig.java diff --git a/src/main/java/cn/xf/basedemo/config/ThreadPoolConfig.java b/src/main/java/cn/xf/basedemo/config/ThreadPoolConfig.java new file mode 100644 index 0000000..e8c5a4c --- /dev/null +++ b/src/main/java/cn/xf/basedemo/config/ThreadPoolConfig.java @@ -0,0 +1,50 @@ +package cn.xf.basedemo.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @Description: 统一异步线程池配置类(防止默认线程池由于无界队列引发 OOM) + * @Author: xiongfeng + * @Date: 2026/5/28 + * @Version: 1.0 + */ +@Slf4j +@Configuration +@EnableAsync +public class ThreadPoolConfig { + + @Bean(name = "asyncServiceExecutor") + public Executor asyncServiceExecutor() { + log.info("初始化异步线程池 [asyncServiceExecutor] 开始..."); + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + + // 核心线程数:根据 CPU 核心数与业务性质配置(此处设为 10) + executor.setCorePoolSize(10); + // 最大线程数:高并发时能够支持的最大线程数 + executor.setMaxPoolSize(50); + // 缓冲队列容量:限制任务队列大小,防止无界队列堆积导致 OOM + executor.setQueueCapacity(1000); + // 空闲线程存活时间(秒) + executor.setKeepAliveSeconds(60); + // 线程名称前缀 + executor.setThreadNamePrefix("async-executor-"); + + // 拒绝策略:当队列满且达到最大线程数时,由调用者线程直接执行任务(保证任务不丢失,同时降低提交速度) + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + + // 优雅停机配置 + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.setAwaitTerminationSeconds(60); + + executor.initialize(); + log.info("初始化异步线程池 [asyncServiceExecutor] 成功!"); + return executor; + } +}