在应用中经常会遇到定时执行任务的需求,这时采用异步的方式开启一个定时任务,通常引用@Async注解,但直接使用会有风险,当我们没有指定线程池时,会默认使用其Spring自带的 SimpleAsyncTaskExecutor 线程池,会不断的创建线程,当并发大的时候会严重影响性能。
1、@Async简介
@Async是一个注解,其作用就是加上该注解的类或方法能够异步执行任务,该注解添加到方法上时,表示该方法是异步方法,添加到类上时,表示该类中的所有方法都是异步方法。
当在使用@Async时,如果不指定具体的线程池名称,那么其使用的是默认线程池SimpleAsyncTaskExecutor。而该线程池的默认配置为(在TaskExecutionProperties中):
- 核心线程数:8
- 容量:Integer.MAX_VALUE
- 最大线程数:Integer.MAX_VALUE
- 空闲线程存活时间:60s
- 允许核心线程超时:true
由上面的配置可知在并发量很大的情况下,其会没有限制的创建线程,当线程数量到达一定程度之后,就会影响相应的性能了。因此,在使用@Async注解时,最好使用自定义线程池,也就是在注解中添加自定义线程池的名字。
2、开启异步
启动类添加@EnableAsync开启异步,类似如下:
@EnableAsync
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3、配置自定义线程池
配置类类似如下:

本文介绍了如何在Spring应用中安全地使用@Async注解执行异步任务,强调了在高并发场景下配置自定义线程池的重要性,以及正确使用@Async注解的注意事项。
最低0.47元/天 解锁文章
1476

被折叠的 条评论
为什么被折叠?



