有没有办法延迟可完成未来的执行?

laz*_*der 3 java asynchronous java-stream completable-future

我将使用 CompletableFuture 进行异步调用。我想知道是否有办法延迟其执行。我对一个流有大约 5 个异步调用,并且我正在链接,然后根据需要使用 thenApply/thenCompose。我的问题是当我为调用创建第一个 CF 时,只要线程空闲,它就会开始执行。我希望首先我的所有任务都应该被链接起来,然后当我调用,说完成()时,它开始执行。我正在寻找的是类似于 Java 流中的中间操作。在我之前关于 SO 的一个问题中,我对此有一些帮助,但这并没有解决我的目的。

我的技术栈只允许 Java 8,所以不能使用下一个版本中推出的任何功能。

小智 6

我还不能写评论,所以我不能要求澄清。请原谅我,如果我没有正确理解,你需要什么。据我所知,您基本上只是在寻找一种方法来延迟 CompletableFuture 的执行,直到您准备好这样做。

您是否考虑过将另一个 CF 作为您要调用的函数的参数?一旦你准备好了,只需完成这个 CF,然后函数就会被执行。它有点像这样:

CompletableFuture<Void> setup = new CompletableFuture<>();
delayedFunction(setup);

//do whatever you want
System.out.println("foo");

//once you are ready, complete setup to execute the delayed function
setup.complete(null);


public static CompletableFuture<Void> delayedFunction(CompletableFuture<Void> setup) {
  return setup.
    thenAccept(v-> {
      System.out.println("bar");
    });
}
Run Code Online (Sandbox Code Playgroud)