javacompletablefuture:尝试运行两个void方法completablefuture和block,直到两个方法都完成

tct7dpnv  于 2021-07-11  发布在  Java
关注(0)|答案(2)|浏览(260)

我尝试运行两个void method1和method2 async,然后阻塞代码,直到这两个方法都完成。
这能实现吗?

CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> method1());
      CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> method2());
      CompletableFuture.allOf(future1, future2).join();
nr9pn0ug

nr9pn0ug1#

我想是密码 CompletableFuture.allOf(future1, future2).join(); 应该很管用。你能试试这个吗,有什么问题吗?
或者你也可以用这样的方法:

Arrays.asList(future1,future1).forEach(Future::get);
lskq00tm

lskq00tm2#

你为什么不使用专门的方法呢 runAsync 不过呢?

public static void main(String[] args) {
      CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> method1());
      CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> method2());

      CompletableFuture<Void> compound = CompletableFuture.allOf(future1, future2);
      compound.join();
      System.out.println("compound done");
}

是的,你的 compound 将在另一个线程上“连接”( main 在上面的例子中),因此 compound done 只有在两个方法都执行之后,才会打印消息。

相关问题