开启异步支持-多线程(@EnableAsync)

Exisi 2022-11-28 08:15:54
Categories: Tags:

 

 

 

参数

描述

annotation

指示要在类或方法级别检测到的异步注释类型

mode

指示应如何应用异步建议

order

指示应应用 AsyncAnnotationBeanPostProcessor 的顺序

proxyTargetClass

指示是否要创建基于子类 (CGLIB) 的代理,而不是基于标准 Java 接口的代理。

 

示例

@Configuration

@EnableAsync

public class ThreadPoolTaskConfig {

    

    private static final int corePoolSize = 10;             // 核心线程数(默认线程数)

    private static final int maxPoolSize = 100;             // 最大线程数

    private static final int keepAliveTime = 10;            // 允许线程空闲时间(单位:默认为秒)

    private static final int queueCapacity = 200;           // 缓冲队列数

    private static final String threadNamePrefix = "Async-Service-"; // 线程池名前缀

    

    @Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名

    public ThreadPoolTaskExecutor getAsyncExecutor(){

        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

        executor.setCorePoolSize(corePoolSize);   

        executor.setMaxPoolSize(maxPoolSize);

        executor.setQueueCapacity(queueCapacity);

        executor.setKeepAliveSeconds(keepAliveTime);

        executor.setThreadNamePrefix(threadNamePrefix);

        

        // 线程池对拒绝任务的处理策略

        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

        // 初始化

        executor.initialize();

        return executor;

    }

}

 

@Service

public class testAsyncService{

    Logger log = LoggerFactory.getLogger(testAsyncService.class);

 

    // 发送提醒短信 1

    @Async("taskExecutor")

    public void service1() throws InterruptedException {

        log.info("--------start-service1------------");

        Thread.sleep(5000); // 模拟耗时

        log.info("--------end-service1------------");

    }

 

    // 发送提醒短信 2

    @Async("taskExecutor")

    public void service2() throws InterruptedException {

 

        log.info("--------start-service2------------");

        Thread.sleep(2000); // 模拟耗时

        log.info("--------end-service2------------");

    }

}

运行结果:

--------start-service1------------

--------start-service2------------

--------end-service2------------

--------end-service1------------