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

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

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

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

nr9pn0ug1#

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

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

lskq00tm2#

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

  1. public static void main(String[] args) {
  2. CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> method1());
  3. CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> method2());
  4. CompletableFuture<Void> compound = CompletableFuture.allOf(future1, future2);
  5. compound.join();
  6. System.out.println("compound done");
  7. }

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

相关问题