什么是“异步调用”?
“异步调用”对应的是“同步调用”,同步调用 指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用 指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。
[TOC]
@Async
在Spring中,基于@Async
标注的方法,称之为 异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。在Spring Boot中,我们只需要通过使用@Async
注解就能简单的将原来的同步函数变为异步函数。
环境/版本一览:
- 开发工具:Intellij IDEA 2018.2.2
- springboot: 2.0.6.RELEASE
- jdk:1.8.0_171
- maven:3.3.9
1、pom.xml
1 | <dependencies> |
2、component
Task组件
的异步方法中使用Future<String>
作为返回类型,通过调用 isDone()
方法来达到判断异步方法是否执行成功的效果。
1 | package com.fatal.component; |
3、Application
在配置类上加上@EnableAsync
打开异步功能
1 | package com.fatal; |
4、Test
1 | package com.fatal; |
5、显示
执行 Chapter241ApplicationTests.contextLoads()
方法显示
可以看到,通过异步调用,让任务一、二、三并发执行,有效的减少了程序的总运行时间。
参考资料
总结
步骤:
- 在方法上加上
@Async
- 在配置类(启动类也属于配置类)上加上
@EnableAsync
SpringBoot
的知识已经有前辈在我们之前探索了。比较喜欢的博主有:唐亚峰 | Battcn、方志朋的专栏、程序猿DD、纯洁的微笑。对这门技术感兴趣的可以去他们的博客逛逛。谢谢他们的分享~~
以上文章是我用来学习的Demo
,都是基于 SpringBoot2.x
版本。
源码地址: https://github.com/ynfatal/springboot2-learning/tree/master/chapter24_1