使用注意事项:
@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.................
~~~