问题标签 [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.
java - Java 8 使用 CompletableFuture::join 维护流顺序
我有一个异步执行的查询输入流。我想确保当我使用时Completablefuture::join
,这些要求的结果是按照输入查询流的顺序收集的。
这就是我的代码的样子:
SQLQueryEngine.execute(查询); 返回一个List<Results>
所以输出是List<List<Result>
. 我想将所有结果展平并合并到一个列表中。如果我在收集之前使用 .flatMap(List::stream) 来展平,它会保持排序吗?
java - 如何为 CompletableFuture::supplyAsync 选择 Executor
CompletableFuture::supplyAsync(() -> IO bound queries)
如何为 CompletableFuture::supplyAsync 选择 Executor 以避免污染ForkJoinPool.commonPool()
.
Executors
( newCachedThreadPool
, newWorkStealingPool
,newFixedThreadPool
等)中有很多选项
如何为我的用例选择合适的?
java - 从可选> 到 CompletableFuture>
我想转换Optional<CompletableFuture<T>>
为CompletableFuture<Optional<T>>
. 有没有更惯用的方式不使用Optional.get()
?
java - Scala 未来到 Java Completable 未来
1 - 我们从 Scala 未来到 Java Completable 未来是否有任何库或建议?
我有一个遗留系统,我需要适应一个在其 API 中返回期货的 Scala 库。
2 - 我还想知道 threadPool 执行器之间的复杂性是如何工作的。我的意思是,从遗留的 Java 应用程序中,我将致力于 forkjoin 公共池,并且 Scala 库有他自己的 ThreadPool 执行器。
最后一个问题是我一直想知道的,线程池执行器之间的通信是如何发生的。在 Java 中,您可以在某种程度上轮询、取消未来,那么您会从另一个上下文中执行此操作吗?
java - Guice 在执行 CompletableFuture 时抛出 OutOfScopeException
从请求范围的线程中,CompletableFuture
s 必须由在执行程序中运行的任务完成。MessageService
提供的供应商使用会话范围内的特定领域服务。该服务由 Guice 注入。
有MessageService
一个(会话范围)MessageRestClient
被注入。
Guice 在尝试注入MessageRestClient
.
ServletScopes
我在:中读到了一个方法,public static <T> Callable<T> transferRequest(Callable<T> callable)
但我看不到使用它的方法,因为没有 Callables 可以发挥作用。你能帮我解决一下吗?
java - CompletableFuture -- 聚合未来以快速失败
我一直在使用CompletableFuture.allOf(...)
助手创建聚合期货,只有当它们的复合期货被标记为完成时才会“完成”,即:
我想对此功能稍作改动,在以下情况下,总体未来是完整的市场:
- 所有期货均已成功完成或
- 任何一个未来都未成功完成
在后一种情况下,聚合未来应该立即(例外地)完成,而不必等待其他未来完成,即快速失败。
为了说明这一点,请对比CompletableFuture.allOf(...)
考虑:
使用allOf(...)
,此代码产生:
而我的替代聚合实现将在 Feature2 完成后返回“true”,因为它是一个例外。
我在 Java 标准库中找不到任何可以帮助我实现这一目标的实用程序,这感觉很奇怪……因为它是一个相对普通的用例。
从实现来看CompletableFuture.allOf(...)
,很明显这些场景背后的逻辑相当复杂。我不愿意自己写这个,我想知道是否有其他选择?
java - CompletableFuture:等待第一个正常返回?
我有一些CompletableFuture
s,我想并行运行它们,等待第一个正常返回。
我知道我可以使用CompletableFuture.anyOf
等待第一个返回,但这会正常或异常返回。我想忽略异常。
java - ForkJoinTask 与 CompletableFuture
在 Java 8 中有两种启动异步计算的方法 -CompletableFuture
和ForkJoinTask
. 它们看起来都非常相似 - CompletableFuture
even extend的内部类ForkJoinTask
。
有理由使用其中一个吗?
我可以看到的一个关键区别是,该CompletableFuture.join
方法只是阻塞,直到未来完成(waitingGet
只是使用 a 旋转ManagedBlocker
),而 aForkJoinTask.join
可以从队列中窃取工作以帮助您完成加入的任务。
是否比其中一个有好处?
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 是否还在半途而废的便捷设计中?
java - 为什么 CompletableFuture.allOf 声明为 CompletableFuture?
为什么CompletableFuture.allOf
声明为CompletableFuture<Void>
而不是返回结果集合或其他内容?我认为CompletableFuture.anyOf
return是个好主意CompletableFuture<Object>
,但是我看到这两种方法是相互关联的,所以我对它们返回的内容感到困惑。