问题标签 [completable-future]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2871 浏览

java - Java 8 使用 CompletableFuture::join 维护流顺序

我有一个异步执行的查询输入流。我想确保当我使用时Completablefuture::join,这些要求的结果是按照输入查询流的顺序收集的。

这就是我的代码的样子:

SQLQueryEngine.execute(查询); 返回一个List<Results>所以输出是List<List<Result>. 我想将所有结果展平并合并到一个列表中。如果我在收集之前使用 .flatMap(List::stream) 来展平,它会保持排序吗?

0 投票
2 回答
6970 浏览

java - 如何为 CompletableFuture::supplyAsync 选择 Executor

CompletableFuture::supplyAsync(() -> IO bound queries)

如何为 CompletableFuture::supplyAsync 选择 Executor 以避免污染ForkJoinPool.commonPool().

Executors( newCachedThreadPool, newWorkStealingPool,newFixedThreadPool等)中有很多选项

在这里读到了新的 ForkJoinPool

如何为我的用例选择合适的?

0 投票
1 回答
2846 浏览

java - 从可选> 到 CompletableFuture>

我想转换Optional<CompletableFuture<T>>CompletableFuture<Optional<T>>. 有没有更惯用的方式不使用Optional.get()

0 投票
1 回答
398 浏览

java - Scala 未来到 Java Completable 未来

1 - 我们从 Scala 未来到 Java Completable 未来是否有任何库或建议?

我有一个遗留系统,我需要适应一个在其 API 中返回期货的 Scala 库。

2 - 我还想知道 threadPool 执行器之间的复杂性是如何工作的。我的意思是,从遗留的 Java 应用程序中,我将致力于 forkjoin 公共池,并且 Scala 库有他自己的 ThreadPool 执行器。

最后一个问题是我一直想知道的,线程池执行器之间的通信是如何发生的。在 Java 中,您可以在某种程度上轮询、取消未来,那么您会从另一个上下文中执行此操作吗?

0 投票
2 回答
3743 浏览

java - Guice 在执行 CompletableFuture 时抛出 OutOfScopeException

从请求范围的线程中,CompletableFutures 必须由在执行程序中运行的任务完成。MessageService提供的供应商使用会话范围内的特定领域服务。该服务由 Guice 注入。

MessageService一个(会话范围)MessageRestClient被注入。

Guice 在尝试注入MessageRestClient.

ServletScopes我在:中读到了一个方法,public static <T> Callable<T> transferRequest(Callable<T> callable) 但我看不到使用它的方法,因为没有 Callables 可以发挥作用。你能帮我解决一下吗?

0 投票
2 回答
2661 浏览

java - CompletableFuture -- 聚合未来以快速失败

我一直在使用CompletableFuture.allOf(...)助手创建聚合期货,只有当它们的复合期货被标记为完成时才会“完成”,即:

我想对此功能稍作改动,在以下情况下,总体未来是完整的市场:

  • 所有期货均已成功完成
  • 任何一个未来都未成功完成

在后一种情况下,聚合未来应该立即(例外地)完成,而不必等待其他未来完成,即快速失败

为了说明这一点,请对比CompletableFuture.allOf(...)考虑:

使用allOf(...),此代码产生:

而我的替代聚合实现将在 Feature2 完成后返回“true”,因为它是一个例外。


我在 Java 标准库中找不到任何可以帮助我实现这一目标的实用程序,这感觉很奇怪……因为它是一个相对普通的用例。

从实现来看CompletableFuture.allOf(...),很明显这些场景背后的逻辑相当复杂。我不愿意自己写这个,我想知道是否有其他选择?

0 投票
5 回答
11091 浏览

java - CompletableFuture:等待第一个正常返回?

我有一些CompletableFutures,我想并行运行它们,等待第一个正常返回。

我知道我可以使用CompletableFuture.anyOf等待第一个返回,但这会正常异常返回。我想忽略异常。

0 投票
2 回答
6321 浏览

java - ForkJoinTask 与 CompletableFuture

在 Java 8 中有两种启动异步计算的方法 -CompletableFutureForkJoinTask. 它们看起来都非常相似 - CompletableFutureeven extend的内部类ForkJoinTask

有理由使用其中一个吗?

我可以看到的一个关键区别是,该CompletableFuture.join方法只是阻塞,直到未来完成(waitingGet只是使用 a 旋转ManagedBlocker),而 aForkJoinTask.join可以从队列中窃取工作以帮助您完成加入的任务。

是否比其中一个有好处?

0 投票
1 回答
3754 浏览

multithreading - 如何从与其关联的线程中发出 CompletableFutures 已完成或已取消的信号?

我已经阅读了很多关于 CompletableFutures 的内容,他们关注 CompletableFuture 无法像 Future 那样访问底层计算代码这一事实。那么,如何从与 completableFuture 关联的任何任务中发出完成()或取消()(或检查 isCancelled(),如果您想从外部中断计算)?

编辑:让我感到困惑的一件事是,CF 被用于替代替代品,因为它的可组合性或手动可设置性,在我看来,提供的实现非常正交,例如:

以不是“可完成”+“可组合”的方式设计它有什么意义?

我想找到一种方法来使用它们,就好像 CF 使用类似于假设的 CompletableCallable 的接口作为输入,但不知道如何。Function<CompletableFuture,T>代替 Callables/Runnables 之类的东西,所以我们可以将其用作:

当要计算代码时,内部执行机制将返回 CF_REF_BIS 引用,因为在未来的计算中实际作为 CF_REF 传递,而无需跨范围访问它。

这意味着我们可以简单地通过创建 new CompeltableCallable() 然后在任何线程可以访问 CompletableFuture 信号量的任何地方提交 n 次来重用去匿名化计算代码

例如:

有没有办法满足这种需求?我是不是忘记了什么?我的方法有什么根本的不一致吗?Java CompletableFuture 是否还在半途而废的便捷设计中?

0 投票
2 回答
4908 浏览

java - 为什么 CompletableFuture.allOf 声明为 CompletableFuture?

为什么CompletableFuture.allOf声明为CompletableFuture<Void>而不是返回结果集合或其他内容?我认为CompletableFuture.anyOfreturn是个好主意CompletableFuture<Object>,但是我看到这两种方法是相互关联的,所以我对它们返回的内容感到困惑。