繁体   English   中英

Java CompletableFuture:尝试将两个 void 方法作为 CompletableFuture 运行并阻塞直到两者都完成

[英]Java CompletableFuture: Trying to run two void methods as CompletableFuture and block until both complete

我正在尝试异步运行两个 void method1 和 method2,然后阻塞代码,直到这两种方法都完成。

这能达到吗?

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

我认为代码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");
}

是的,您的compound将在另一个线程(上面示例中的main )上“加入”,因此compound done消息仅在两种方法执行后才会打印。

暂无
暂无

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

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