spring之@EnableAsync @Async 的详解以及ThreadPoolConfig配置

@Configuration
@EnableAsync
@Slf4j
public class ThreadPoolConfig {
          
   

    private static final int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors();
    private static final String SERVICE_THREAD = "serviceThread-";
    private static final String MVC_THREAD = "MvcThread-";
    private static final int QUEUE_CAPACITY = 1500;

    public ThreadPoolConfig() {
          
   
        log.info("[ThreadPoolConfig] init ..");
    }

    /**
     * service层业务线程池
     */
    @Bean
    @Primary
    public ThreadPoolTaskExecutor taskExecutor() {
          
   
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(AVAILABLE_PROCESSORS + 1);
        executor.setThreadNamePrefix(SERVICE_THREAD);
        executor.setQueueCapacity(QUEUE_CAPACITY);
        executor.setMaxPoolSize(AVAILABLE_PROCESSORS + 2);
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.setKeepAliveSeconds(150);
        executor.setAllowCoreThreadTimeOut(true);

        executor.initialize();
        return executor;
    }

    /**
     * MVC层业务线程池
     */
    @Bean
    public ThreadPoolTaskExecutor mvcTaskExecutor() {
          
   
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(AVAILABLE_PROCESSORS + 1);
        executor.setThreadNamePrefix(MVC_THREAD);
        executor.setQueueCapacity(QUEUE_CAPACITY);
        executor.setMaxPoolSize(AVAILABLE_PROCESSORS + 4);
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.setAllowCoreThreadTimeOut(true);
        executor.setKeepAliveSeconds(180);
        executor.initialize();
        return executor;
    }

}
经验分享 程序员 微信小程序 职场和发展