package com.keyware.composeanalysis.config.thread; 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; /** * 创建线程池配置类 */ @Configuration public class TaskExecutePool { /** * 核心线程数 */ private int coreThreadsSize = 20; /** * 最大线程数 */ private int maxThreadsSize = 50; /** * 存活时间 */ private int keepAliveSeconds = 60; /** * 队列容量 */ private int queueCapacity = 10000; @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //核心线程池大小 executor.setCorePoolSize(coreThreadsSize); //最大线程数 executor.setMaxPoolSize(maxThreadsSize); //队列容量 executor.setQueueCapacity(queueCapacity); //活跃时间 executor.setKeepAliveSeconds(keepAliveSeconds); //线程名字前缀 executor.setThreadNamePrefix("analysis-exec-"); // setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务 // CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 等待所有任务结束后再关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(true); executor.initialize(); return executor; } }