繁体   English   中英

CompletableFuture with void方法

[英]CompletableFuture with void methods

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

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

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

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

非常感谢您的帮助!

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

CompletableFuture<Void> cf1 = CompletableFuture.runAsync(() -> a());
CompletableFuture<Void> cf2 = CompletableFuture.runAsync(() -> b());
CompletableFuture<Void> cf3 = CompletableFuture.anyOf(cf1, cf2).thenRunAsync(() -> c());

或者你可以直接使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM