spring之@EnableAsync @Async 的详解
@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;
}
}