@Aysnc异步多线程使用

1,350 阅读1分钟

使用注意事项:

@Aysnc 只能使用publie方法上

调用方法和异步方法不能在同一类里,否则不生效.

1.线程池创建

@Configuration
@Slf4j
public class AsyncConfig {

    @Bean("asyncThreadPoolTaskExecuter")
    public Executor ThreadPoolTaskExecuter() {
        int coreNum = Runtime.getRuntime().availableProcessors();
        log.info("cpu数量 {}", coreNum);
        ThreadPoolTaskExecutor threadPoolExecutor = new ThreadPoolTaskExecutor();
        threadPoolExecutor.setCorePoolSize(coreNum);
        threadPoolExecutor.setThreadNamePrefix("aysc_thread_");
        threadPoolExecutor.setMaxPoolSize(2*coreNum);
        threadPoolExecutor.setQueueCapacity(20);
        threadPoolExecutor.setKeepAliveSeconds(10);
        threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        threadPoolExecutor.initialize();
        return threadPoolExecutor;
    }
}


//启动类上加启动注解
@EnableAsync    //  开启异步请求注解
public class MainApplication {

}

2.异步调用的方法

 @Async("asyncThreadPoolTaskExecuter")
 public void doit() throws InterruptedException {

        log.info("执行任务 {}.................",Thread.currentThread().getName());
        Thread.sleep(5000);
    }

3.调用方法

 @Test
    public void test() throws InterruptedException {
        for (int i = 0; i < 30; i++) {
            DemoService.doit();
        }
        log.info("执行完成.................");
}

4.结果

2020-08-12 16:01:17.536  INFO 1728 --- [           main] lang.StringVVV                           : 执行完成.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_6] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_6.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_9] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_9.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_7] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_7.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_2] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_2.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_3] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_3.................
2020-08-12 16:01:17.544  INFO 1728 --- [ aysc_thread_10] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_10.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_1] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_1.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_5] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_5.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_8] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_8.................
2020-08-12 16:01:17.544  INFO 1728 --- [  aysc_thread_4] c.s.g.m.w.service.DemoService        : 执行任务 aysc_thread_4.................
~~~