Java 在CompletableFuture中,当下一阶段仅在完成前一阶段后开始时,异步模式方法的用途是什么? CompletableFuture=SupplySync(()->4); future.thenappyasync(数据->doSomeHeavyTask() .ThenApplySync(数据->doSomeLiteTask()) .thenAccept(System.out::println);

Java 在CompletableFuture中,当下一阶段仅在完成前一阶段后开始时,异步模式方法的用途是什么? CompletableFuture=SupplySync(()->4); future.thenappyasync(数据->doSomeHeavyTask() .ThenApplySync(数据->doSomeLiteTask()) .thenAccept(System.out::println);,java,asynchronous,java.util.concurrent,completable-future,Java,Asynchronous,Java.util.concurrent,Completable Future,在这里,我们可以确定,如果主线程在异步模式下执行某些任务,那么它将执行自己的任务。。 但是doSomeLiteTask()只有在完成doSomeHeavyTask()之后才会启动,那么为什么要异步呢?正如您所说,“so main处于异步模式”。换句话说,无论是doSomeHeavyTask()还是doSomeLiteTask()将在主线程中执行。那么您的问题是什么?是的,我知道了,谢谢..我只是不明白为什么他们提供了几乎所有方法的异步版本..假设您的上一个completionStage由comm

在这里,我们可以确定,如果主线程在异步模式下执行某些任务,那么它将执行自己的任务。。
但是doSomeLiteTask()只有在完成doSomeHeavyTask()之后才会启动,那么为什么要异步呢?

正如您所说,“so main处于异步模式”。换句话说,无论是
doSomeHeavyTask()
还是
doSomeLiteTask()
将在主线程中执行。那么您的问题是什么?是的,我知道了,谢谢..我只是不明白为什么他们提供了几乎所有方法的异步版本..假设您的上一个completionStage由commons池线程完成,那么下一个阶段将由commons池线程完成,如果主线程无事可做,则可能是主线程,或者可能是同一个co如果操作被阻塞,那么主线程将不会被阻塞。我说的对吗?与其提供这么多重载的异步版本,不如提供一个async()方法,这样整个管道可以是同步的,也可以是异步的,因为Streams api具有并行模式。流具有一个可配置为并行或顺序的管道。未来不会。每次调用
,然后…
,您都在创建一个新的未来,并设置在第一个未来完成时要执行的操作,以尝试完成另一个。你的问题的例子的四个未来不仅是独立的,而且它们与你设置的完成尝试没有耦合。你可以调用
complete
,其中任何一个都有一个值,使挂起的异步完成尝试无效。明白了。谢谢,completableFuture与jav有点类似ascript有承诺

CompletableFuture<Integer> future = supplyAsync(()-> 4);

future.thenApplyAsync(data -> doSomeHeavyTask()   
      .thenApplyAsync(data -> doSomeLiteTask())
      .thenAccept(System.out::println);