![bf7ba3c5d27f0c93d41004d8112b60d4.png](https://i-blog.csdnimg.cn/blog_migrate/65d74d890d56a727c9c63818045fc033.jpeg)
介绍
同步调用
先来演示一下什么是同步调用
![dc725c4733b14dc6a15757e5d5974c01.png](https://i-blog.csdnimg.cn/blog_migrate/d5bc8e749991139239a968b44e430b23.jpeg)
测试方法
![b050b5d8d7b83362dbe99328d5fd69c4.png](https://i-blog.csdnimg.cn/blog_migrate/7eef7c3ede0486e4855c44e8ccb6b7da.jpeg)
输出如下
doTaskOne start 1566121320372doTaskOne end 1566121321373doTaskTwo start 1566121321373doTaskTwo end 1566121322374
可以看到方法一执行完毕,方法二才会执行
异步调用不返回值
1.Spring Boot启动类上加@EnableAsync注解
@SpringBootApplication@EnableAsync
2.方法上加@Async注解
![4533f0ef64272a464cee48d33dade470.png](https://i-blog.csdnimg.cn/blog_migrate/381fde61020e6b4d9fb33648c9178652.jpeg)
测试类如下
![257e8cdbe233338a1826250ea01619ee.png](https://i-blog.csdnimg.cn/blog_migrate/b2fd7778aa2df1795993a01b5e885266.jpeg)
最后的TimeUnit.SECONDS.sleep(3)保证主线程存活,不然主线程执行完看不到子线程输出的end,输出如下
doTaskOne start 1566121729140doTaskTwo start 1566121729140doTaskOne end 1566121730140doTaskTwo end 1566121730140
看输出,2个任务同时启动。2个没有关系的任务以前需要2s才能执行完,异步后1s就能执行完,效率提高。
异步调用返回值
![0e8c92f3a240a45ff952703f104a4b03.png](https://i-blog.csdnimg.cn/blog_migrate/df64a9888b8beb4238f83d1cc5fc1d09.jpeg)
测试类
![72f2a6f1469b7b62dff4a0e551353011.png](https://i-blog.csdnimg.cn/blog_migrate/69b0c4eea23a7e718c617f013e03d895.jpeg)
输出如下
doTaskTwo start 1566122170684doTaskOne start 1566122170684doTaskTwo end 1566122171684doTaskOne end 1566122171684taskOne returntaskTwo return
Future类的get方法是阻塞方法,没有结果返回时会一直阻塞。