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;@Configuration@EnableAsync@Slf4jpublic class ExecutorConfig { @Bean(name ="threadPool") public Executor asyncServiceExecutor() { log.info("================== start asyncServiceExecutor =================="); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(4); executor.setMaxPoolSize(8); executor.setQueueCapacity(50000); executor.setKeepAliveSeconds(60); //配置线程池中的线程的名称前缀 executor.setThreadNamePrefix("thread-synchronization-runner-%d"); // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //执行初始化 executor.initialize(); return executor; } /** * IO密集型线程池配置,此线程池多用于网络请求,磁盘IO。对CPU计算资源消耗娇小 * @return */ @Bean(name ="ioThreadPool") public Executor IOIntensiveExecutor() { log.info("================== start IOIntensiveExecutor =================="); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(20); executor.setMaxPoolSize(30); executor.setQueueCapacity(300000); executor.setKeepAliveSeconds(60); //配置线程池中的线程的名称前缀 executor.setThreadNamePrefix("IO-Thread-synchronization-runner-%d"); // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //执行初始化 executor.initialize(); return executor; }}