gpt4 book ai didi

java - Java CompletableFuture 的 thenApply 和 thenApplyAsync 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 21:12:52 30 4
gpt4 key购买 nike

假设我有以下代码:

CompletableFuture<Integer> future  
= CompletableFuture.supplyAsync( () -> 0);

thenApply 案例:

future.thenApply( x -> x + 1 )
.thenApply( x -> x + 1 )
.thenAccept( x -> System.out.println(x));

这里的输出将是 2。现在在 thenApplyAsync 的情况下:

future.thenApplyAsync( x -> x + 1 )   // first step
.thenApplyAsync( x -> x + 1 ) // second step
.thenAccept( x -> System.out.println(x)); // third step

我读到了 blog每个 thenApplyAsync 都在一个单独的线程中执行并且“同时”(这意味着在 thenApplyAsyncs 完成之前开始的 thenApplyAsyncs 之后),如果那么,如果第一步没有完成,那么第二步的输入参数值是多少呢?

如果不被第二步采取,第一步的结果会去哪里?第三步会取哪一步的结果?

如果第二步必须等待第一步的结果,那么 Async 的意义何在?

这里 x -> x + 1 只是为了说明这一点,我想知道的是在很长的计算情况下。

最佳答案

区别在于负责运行代码的ExecutorCompletableFuture上的每个算子一般都有3个版本。

  1. thenApply(fn) - 在调用它的 CompleteableFuture 定义的线程上运行 fn,因此您通常不知道在哪里这将被执行。如果结果已经可用,它可能会立即执行。
  2. thenApplyAsync(fn) - 在环境定义的执行程序上运行 fn,无论情况如何。对于 CompletableFuture,这通常是 ForkJoinPool.commonPool()
  3. thenApplyAsync(fn,exec) - 在 exec 上运行 fn

最终结果是一样的,但是调度行为取决于方法的选择。

关于java - Java CompletableFuture 的 thenApply 和 thenApplyAsync 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47489338/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com