package com.skua.config; 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.ThreadPoolExecutor; /** * @program: skboot * @description: 线程词配置类 * @author: xie chao * @create: 2022-03-02 11:34 */ @Configuration //开启异步调用, 即哪个方法用了 @Async("taskExecutor"),就会通过线程池调用 @EnableAsync public class TaskPoolConfig { @Bean(name="taskExecutor") public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //配置核心线程数:就是线程池中的核心线程数量,这几个核心线程,只是在没有用的时候,也不会被回收 executor.setCorePoolSize(10); //配置最大线程数:就是线程池中可以容纳的最大线程的数量 executor.setMaxPoolSize(200); //配置队列大小 executor.setQueueCapacity(500); //线程池维护线程所允许的空闲时间:就是线程池中除了核心线程之外的其他的最长可以保留的时间,因为在线程池中,除了核心线程即使在无任务的情况下也不能被清除,其余的都是有存活时间的,意思就是非核心线程可以保留的最长的空闲时间 executor.setKeepAliveSeconds(60); //配置线程池中的线程的名称前缀 executor.setThreadNamePrefix("task-executor-"); // handler,是一种拒绝策略,我们可以在任务满了之后,拒绝执行某些任务。 // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // AbortPolicy:用于被拒绝任务的处理程序,它将抛出RejectedExecutionException // CallerRunsPolicy:用于被拒绝任务的处理程序,它直接在execute方法的调用线程中运行被拒绝的任务。 // DiscardOldestPolicy:用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试execute。 // DiscardPolicy:用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。 //执行初始化 executor.initialize(); return executor; } }