Spring 线程池的使用和配置

  • Post author:
  • Post category:其他

@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 版权协议,转载请附上原文出处链接和本声明。