介绍
同步调用
先来演示一下什么是同步调用
测试方法
输出如下
doTaskOne start 1566121320372
doTaskOne end 1566121321373
doTaskTwo start 1566121321373
doTaskTwo end 1566121322374
可以看到方法一执行完毕,方法二才会执行
异步调用不返回值
1.Spring Boot启动类上加@EnableAsync注解
@SpringBootApplication
@EnableAsync
2.方法上加@Async注解
测试类如下
最后的TimeUnit.SECONDS.sleep(3)保证主线程存活,不然主线程执行完看不到子线程输出的end,输出如下
doTaskOne start 1566121729140
doTaskTwo start 1566121729140
doTaskOne end 1566121730140
doTaskTwo end 1566121730140
看输出,2个任务同时启动。2个没有关系的任务以前需要2s才能执行完,异步后1s就能执行完,效率提高。
异步调用返回值
测试类
输出如下
doTaskTwo start 1566122170684
doTaskOne start 1566122170684
doTaskTwo end 1566122171684
doTaskOne end 1566122171684
taskOne return
taskTwo return
Future类的get方法是阻塞方法,没有结果返回时会一直阻塞。
閱讀更多 Java識堂 的文章