使用void方法的CompletableFuture

时间:2018-05-01 07:50:31

标签: java completable-future

我希望运行两个方法a()b(),它们不接受任何参数,并且不会异步返回任何内容(即void方法),以便它们以任何顺序同时返回。

但是,第三种方法c()只应在其他任何一种方法完成之后运行。

我相信我应该创建两个CompletableFuture对象(cf1用于a()和cf2 b()),然后使用CompletableFuture.anyOf(cf1, cf2).join()来阻止c()的代码。

但是,我不确定如何创建cf1和cf2 CompletableFuture对象。我理解方法a()b()基本上类似于Runnable的run方法,但我不想改变它们的实现方式。我应该调用哪种CompletableFuture方法来为这两种方法创建这个CompletableFuture对象?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

如果我正确理解你的问题,你可以做这样的事情,等到方法a()b()中的任何一个完成,然后一旦完成其中一个,你运行方法{{1 }}

c()

答案 1 :(得分:1)

或者您可以直接使用runAfterEither作为

    CompletableFuture<Void> a = CompletableFuture.runAsync(() -> {
        Util.delay(new Random().nextInt(1000));
        System.out.println("Hello ");
    });

    a = a.runAfterEither(CompletableFuture.runAsync(() -> {
        Util.delay(new Random().nextInt(1000));
        System.out.println("Hi ");
    }), () -> {
        System.out.println("world"); // your c();
    });

    a.join();