假设我有以下代码:然后应用程序和Java CompletableFuture的应用程序同步有什么区别?
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只是为了表明这一点,我想知道的是在计算时间很长的情况下。
你在IDE调试器中试过这个吗?似乎你可以很容易地找出几个恰当的断点发生的事情。 –
有趣的问题!我在文本中添加了一些格式,我希望没问题。请注意,您可以使用内嵌代码的“'”将其格式化为代码,并且您需要一个空行来创建新段落。 – Lii
除了'thenApply'的情况,我对并发性并不熟悉,并没有太多实践,我的天真印象是并发代码难以跟踪,所以不要尝试自己,我希望有人可以给我为此澄清了我的困惑。 @JimGarrison – Yulin