Spring Boot 异步方法的调用
参考资料:
使用方法
两个步骤:
1、开启配置 @EnableAsync
,这一步特别容易忘记,导致测试的时候不生效,所以请留意。
2、使用注解 @Async
特别注意: @Async
所修饰的函数不能定义为 static 类型,如果是 static 类型异步调用不会生效。
如何获得异步方法的返回值
1、将异步方法原来的 void 声明改为 Future<T>
;
2、异步方法的返回值为 new AsyncResult<T>
;
3、测试方法:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HelloWorldApplication.class)
public class TaskTest {
@Autowired
private Task task;
@Test
public void test01(){
Future<String> f1 = task.doTaskOne();
Future<String> f2 = task.doTaskTwo();
Future<Integer> f3 = task.doTaskThree();
try {
while (f1.isDone()){
System.out.println(f1.get());
}
while (f2.isDone()){
System.out.println(f2.get());
}
while (f3.isDone()){
System.out.println(f3.get());
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
CountDownLatch countDownLatch = new CountDownLatch(1);
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("JVM 退出");
}
}
源代码可以在我的 GitHub 上下载,地址是:我的 GitHub ,请记得选择 async 分支。