From fe2608f3eaef5b72b907b6d3c07460f349b4ba20 Mon Sep 17 00:00:00 2001 From: hanfuye Date: Fri, 16 Jan 2026 22:43:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E5=B9=B6=E7=AE=80=E5=8D=95=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/config/ThreadPoolConfig.java | 48 +++++++++++++++++++ .../auth/constant/ConfigConstants.java | 35 ++++++++++++++ .../auth/ThreadPoolTaskExecutorTests.java | 34 +++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/config/ThreadPoolConfig.java create mode 100644 xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/constant/ConfigConstants.java create mode 100644 xiaoyi-auth/src/test/java/top/crushtj/xiaoyishu/auth/ThreadPoolTaskExecutorTests.java diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/config/ThreadPoolConfig.java b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/config/ThreadPoolConfig.java new file mode 100644 index 0000000..8d5252f --- /dev/null +++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/config/ThreadPoolConfig.java @@ -0,0 +1,48 @@ +package top.crushtj.xiaoyishu.auth.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +import static top.crushtj.xiaoyishu.auth.constant.ConfigConstants.*; + +/** + * @author ayi + * @version V1.0 + * @title ThreadPoolConfig + * @date 2026/01/16 22:26 + * @description 线程池配置类 + */ + +@Configuration +public class ThreadPoolConfig { + + @Bean(name = "taskExecutor") + public Executor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 核心线程数 + executor.setCorePoolSize(CORE_POOL_SIZE); + // 最大线程数 + executor.setMaxPoolSize(MAX_POOL_SIZE); + // 队列容量 + executor.setQueueCapacity(QUEUE_CAPACITY); + // 线程活跃时间(秒) + executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS); + // 线程名前缀 + executor.setThreadNamePrefix(THREAD_NAME_PREFIX); + + // 拒绝策略:由调用线程处理(一般为主线程) + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + + // 等待所有任务结束后再关闭线程池 + executor.setWaitForTasksToCompleteOnShutdown(true); + // 设置等待时间,如果超过这个时间还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是被没有完成的任务阻塞 + executor.setAwaitTerminationSeconds(AWAIT_TERMINATION_SECONDS); + + executor.initialize(); + return executor; + } +} diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/constant/ConfigConstants.java b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/constant/ConfigConstants.java new file mode 100644 index 0000000..32e644e --- /dev/null +++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/constant/ConfigConstants.java @@ -0,0 +1,35 @@ +package top.crushtj.xiaoyishu.auth.constant; + +/** + * @author ayi + * @version V1.0 + * @title ConfigConstants + * @date 2026/01/16 + * @description 配置常量类 + */ + +public class ConfigConstants { + + /** + * 核心线程数 + */ + public static final int CORE_POOL_SIZE = 10; + /** + * 最大线程数 + */ + public static final int MAX_POOL_SIZE = 50; + /** + * 队列容量 + */ + public static final int QUEUE_CAPACITY = 200; + /** + * 线程活跃时间(秒) + */ + public static final int KEEP_ALIVE_SECONDS = 30; + /** + * 线程名前缀 + */ + public static final String THREAD_NAME_PREFIX = "AuthExecutor-"; + + public static final int AWAIT_TERMINATION_SECONDS = 60; +} diff --git a/xiaoyi-auth/src/test/java/top/crushtj/xiaoyishu/auth/ThreadPoolTaskExecutorTests.java b/xiaoyi-auth/src/test/java/top/crushtj/xiaoyishu/auth/ThreadPoolTaskExecutorTests.java new file mode 100644 index 0000000..af4aa56 --- /dev/null +++ b/xiaoyi-auth/src/test/java/top/crushtj/xiaoyishu/auth/ThreadPoolTaskExecutorTests.java @@ -0,0 +1,34 @@ +package top.crushtj.xiaoyishu.auth; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +/** + * @author ayi + * @version V1.0 + * @title ThreadPoolTaskExecutorTests + * @date 2026/01/16 22:34 + * @description 线程池测试类 + */ + +@Slf4j +@SpringBootTest +public class ThreadPoolTaskExecutorTests { + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + /** + * 测试线程池 + */ + @Test + void testSubmit() { + int count = 300; + while (count-- > 0) { + int finalCount = count; + threadPoolTaskExecutor.submit(() -> log.info("异步线程: 这是{}号线程", finalCount)); + } + } +}