一、什么是异步?
现在我们假设有一个接口方法,里面又调用了三个子方法,分别是A,B,C。先从A执行,执行完毕再执行B,B执行完最后执行C。这也是我们代码最常见的执行方式。ABC顺序执行,其中一个出问题了,如果抛出了异常,后续则不再执行。这中方式就是同步执行。
那么异步执行是什么样子的呢?
假设B方法改为异步,那么A方法执行完毕,执行B方法。此时不需要等B方法执行完毕,代码会直接执行C方法。也就是B方法不再影响C方法的执行,这里B方法就是异步执行。
二、为什么要使用异步编程?
异步方法的作用也很明显,假设我们上面的接口方法是一个用户注册方法,A方法注册成功,B方法是增加积分,C方法增加权限。那么A方法执行成功后,我们就可以给用户添加权限了。至于增加积分,完全可以异步处理,这样注册的效率就会更高,提高用户体验。实际上的业务场景还有很多,通常需要异步的都是执行比较慢,又对我们串行执行的业务逻辑没有影响,为了提高代码效率,我们就需要异步执行。
三、SpringBoot开启异步编程
接下来,我们就以SpringBoot项目为例,来看下如何使用异步编程。
第一步,通常来说一个新功能都是从引入包开始,因为这个功能本身是Spring 3提供的功能,所以我们可以直接使用。首先在主启动类上通过注解@EnableAsync开启异步功能。
@SpringBootApplication
@EnableAsync
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
复制代码
第二步,在需要异步的方法上,添加注解@Async,这样就可以了。
@Async
public void testAsync() {
xxxx;
}
复制代码
是不是非常简单?使用当然非常简单了,但是这里面有许多坑和业务场景,我们就来一一说明。
1、有返回值的异步方法
@RestController
public class TestController {
public Result testAsync(){
service.testA