我希望运行两个方法a()
和b()
,它们不接受任何参数,并且不会异步返回任何内容(即void方法),以便它们以任何顺序同时返回。
但是,第三种方法c()
只应在其他任何一种方法完成之后运行。
我相信我应该创建两个CompletableFuture对象(cf1用于a()
和cf2 b()
),然后使用CompletableFuture.anyOf(cf1, cf2).join()
来阻止c()
的代码。
但是,我不确定如何创建cf1和cf2 CompletableFuture对象。我理解方法a()
和b()
基本上类似于Runnable的run
方法,但我不想改变它们的实现方式。我应该调用哪种CompletableFuture方法来为这两种方法创建这个CompletableFuture对象?
非常感谢您的帮助!
答案 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();