springboot Async多线程

Async是springboot集成多线程
注意:调用
@Async方法时不能在同一个类中,不然会异步调用会不生效

可以定义多个线程池,指定线程池异步调用 @Async("myAsyncPool")
也可以不指定,使用默认的@Async
@Configuration
@EnableAsync
public class AsyncConfig {
    @Bean("myAsyncPool")
    public Executor myTaskAsyncPool() {
        /**
         * corePoolSize:线程池维护线程的最少数量
         * keepAliveSeconds:允许的空闲时间
         * maxPoolSize:线程池维护线程的最大数量
         * queueCapacity:缓存队列
         * rejectedExecutionHandler:对拒绝task的处理策略
         */

        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(200);
        executor.setAwaitTerminationSeconds(60);
        executor.setQueueCapacity(120);
        executor.setKeepAliveSeconds(200);
        executor.setThreadNamePrefix("MyExecutor-");
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}

使用

public class AsyncService {
    
    @Async("myAsyncPool")
    void test(){

    }
}

 

posted on 2019-06-03 16:34  xiaogui918  阅读(369)  评论(0编辑  收藏  举报

导航