Java CompletableFuture:尝试运行CompletableFuture和block两个void方法,直到两者都完成

Java CompletableFuture:尝试运行CompletableFuture和block两个void方法,直到两者都完成,java,completable-future,Java,Completable Future,我尝试运行两个void method1和method2 async,然后阻塞代码,直到这两个方法都完成 这能实现吗 CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> method1()); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> method2());

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

这能实现吗

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

我认为code
CompletableFuture.allOf(future1,future2.join()应该可以正常工作。你能试试这个吗,有什么问题吗

或者,您可以使用以下内容:

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

为什么不使用专用的方法
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");
}
publicstaticvoidmain(字符串[]args){
CompletableFuture-future1=CompletableFuture.runAsync(()->method1());
CompletableFuture-future2=CompletableFuture.runAsync(()->method2());
CompletableFuture复合=CompletableFuture.allOf(future1,future2);
component.join();
系统输出打印项次(“复合完成”);
}

是的,您的
复合
将被“连接”到另一个线程上(在上面的示例中为
main
),因此,只有在两种方法都执行后才会打印
复合完成
消息。

是。你试过运行它吗?