Spring Boot 异步方法的调用

Spring Boot 异步方法的调用

参考资料:

1、Spring Boot中使用@Async实现异步调用

使用方法

两个步骤:
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 分支。

原文地址:https://www.cnblogs.com/liweiwei1419/p/6769549.html