@Configuration
@EnableAsync //开启异步调用
public class AsyncExecutorConfig {
@Value("${thread.number}")
private Integer threadNumber;
@Value("${thread.namePrefix}")
private Integer namePrefix;
@Bean("asyncThreadExecutor")
public Executor asyncThreadExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(threadNumber);
// 设置线程队列大小
executor.setQueueCapacity(threadNumber * 10);
// 设置线程最大线程数量
executor.setMaxPoolSize(threadNumber * 5);
// 设置最大线程空闲时间,达到最大空闲时间则自动销毁
executor.setKeepAliveSeconds(30);
// 设置线程池名称前缀
executor.setThreadNamePrefix(namePrefix);
// 设置核心线程达到最大空闲时间时也可以销毁
executor.setAllowCoreThreadTimeOut(true);
/*
* rejection-policy:当pool已经达到max size的时候,如何处理新任务
* CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
*/
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 初始化
executor.initialize();
return executor;
}
}
参数的配置详情参考:https://blog.csdn.net/zhouhl_cn/article/details/7392607
调用使用线程池 @Async
@Async("asyncThreadExecutor")
public void threadPool() {
LoggerFactory.getLogger(CustomerService.class).info("***" + ":Hello World!");
}
版权声明:本文为qq_37737274原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。