springboot @Async异步调用

我们在做项目时有时需要执行一些耗时操作或者定时任务,这时我们可以使用springboot中的@Async注解,使用@Async注解需要在启动类上添加@EnableAsync
调用被@Async注解的方法会在一个单独的线程内运行,适合及时返回,异步解耦,然后让方法慢慢处理
但是在使用@Async注解的时候我们要注意3点
第一:@Async 注解的方法只能 返回void或者future类型的返回值,其他值会使 注解无效,因为不能异步执行
第二:被@Async 注解的方法在独立线程调用,不能被@ControllerAdvice全局异常处理器捕获,所以需要自己设置异常处理
第三:这点是最重要的,很多人都会忽略,我之前也犯过类似错误,我们使用@Async进行异步处理是想提高效率的,但是@Async默认配置使用的是SimpleAsyncTaskExecutor,该线程池默认来一个任务创建一个线程,这样会导致线程频繁的创建和销毁,浪费资源。而且如果任务过多,极有可能造成内存溢出

我们采取的解决方案是实现AsyncConfigurer接口,然后使用spring提供的ThreadPoolTaskExecutor来自定义线程池

在这里插入代码片@Configuration
public class AsyncConfigura

你可能感兴趣的:(多线程,异步,@Async,java)