【发布时间】:2022-01-08 07:12:47
【问题描述】:
我做了研究,但没有找到这个问题的充分答案。
为什么我们需要比舞台更多的舞台。
一个线程 -> 一个大任务(A,B,C,D) VS CompletableFuture 具有阶段 A、B、C、D
所以我的答案如下:
- 如果我有更多阶段,我可以将任务拆分为不同的方法和类
- 如果我有更多阶段,执行与其他整体任务相关的整个任务会更公平。我的意思是什么?假设我们的系统中只有一个线程。如果我以这种方式执行它 -> 一个大任务(A,B,C,D),那么在第一个大任务准备好之后,我的下一个大任务(W,X,Y,Z)就有机会被执行。使用 CompletionStages 更公平:因为 A,W,B,C,X,Y,Z,D 可能是执行顺序
我的最后一点是否有任何指标/规则,我应该将大任务分成多小的子任务?
- 我的最后一点是针对 CompletableFutures 中的阶段的吗?
- 我的第一点是不是 CompletableFutures 中的各个阶段的要点?
- 使用 CompletableFutures 的阶段还有其他要点吗?
【问题讨论】:
-
假设您有任务 A、B 和 C,其中 A 后面跟着 B 或 C,具体取决于变量 x。现在想象在处理 A 之前没有设置 x。在那里,如果你想在这里异步做事情,你需要阶段。
-
但是如果我只使用一个 completableFuture 管道,那么在执行 B 和 C 之前计算 x,如果我在一个线程中使用这个“阶段”也是一样的。我没有考虑涉及到复杂的 CompletalbeStages.allOf()/anyOf() 来混合不同的管道;我的意思是一个管道中的正常 thenApplyAsync 方法
-
我的意思是,您可以同时计算 x 并异步处理 A。然后,根据 x 的结果,将 B 或 C 链接到 A。
-
是的,我明白,你的意思,不认为我们可以将其添加到我的项目符号中,....但也许还有一些分期和直接分期的原因,所以 cf .thenApplyAsync()..thenApplayAsync()..thenApplyAsync() 在您的情况下,此链将被破坏,并且条件语句将在其中的某个点;那 - 我所说的同意你 - 是使用 CFs 的一个很好的理由^^
标签: java multithreading concurrency future completable-future