# spring-boot-async **Repository Path**: caychen/spring-boot-async ## Basic Information - **Project Name**: spring-boot-async - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-04-02 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 1、只需要通过使用@Async注解就能简单的将原来的同步函数变为异步函数 ##### **注: @Async所修饰的函数不要定义为static类型,这样异步调用不会生效**
### 2、需要在Spring Boot的主程序中配置@EnableAsync使@Async注解生效 ```java @Component public class AsyncTask { @Async//使用@Async注解来设置该任务为异步的 public void doTaskOne() throws InterruptedException { System.out.println("完成任务一"); } @Async public void doTaskTwo() throws InterruptedException { System.out.println("完成任务二"); } @Async public void doTaskThree() throws InterruptedException { System.out.println("完成任务三"); } } ``` ``` 结果: 如果不在测试方法里加入sleep,那么该测试方法可能会出现如下几种情况: 1. 没有任何任务相关的输出 2. 有部分任务相关的输出 3. 乱序的任务相关的输出 原因: 三个函数是异步执行的,主程序在异步调用后,主程序并不会理会三个函数是否已经执行完成了,所以当主程序执行完成后,就自动结束了,导致异步调用的结果输出不完整。 ``` ### 3、使用异步回调: 为了能让异步调用能够正常结束,需要使用 **Future** 来返回异步调用的结果,通过改造异步函数(另外两个函数同doTaskOne) ```java @Async public Future doTaskOne() throws Exception { System.out.println("完成任务一"); return new AsyncResult<>("任务一完成"); } ``` 在调用的地方通过返回值来控制代码的结束: ```java Future task1 = task.doTaskOne(); Future task2 = task.doTaskTwo(); Future task3 = task.doTaskThree(); while(true) { if(task1.isDone() && task2.isDone() && task3.isDone()) { // 三个任务都调用完成,退出循环等待 break; } Thread.sleep(1000); } ```
------ #### 插入一波广告,欢迎关注 |**#**|**#**| |:--|:--:| |**作者:**|**Cay**| |**QQ:**|点击这里给我发消息| |**邮箱:**|**412425870@qq.com**| |**微信公众号:Cay课堂**|**![](https://github.com/caychen/readme/raw/master/img/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7.jpg)**| |**csdn博客:**|**[http://blog.csdn.net/caychen](http://blog.csdn.net/caychen "我的csdn博客")**| |**码云:**|**[https://gitee.com/caychen/](https://gitee.com/caychen/ "我的码云")**| |**github:**|**[https://github.com/caychen](https://gitee.com/caychen/ "我的github")**| |**点击群号或者扫描二维码即可加入QQ群:[328243383(1群)](https://jq.qq.com/?_wv=1027&k=54r3suD)**|**![](https://github.com/caychen/readme/raw/master/img/1%E7%BE%A4.png)**| |**点击群号或者扫描二维码即可加入QQ群:[180479701(2群)](https://jq.qq.com/?_wv=1027&k=521g7zY)**|**![](https://github.com/caychen/readme/raw/master/img/2%E7%BE%A4.png)**|