问题标签 [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 - 如何中断 CompletableFuture 的底层执行
我知道CompletableFuture
设计不会通过中断来控制其执行,但我想你们中的一些人可能会遇到这个问题。CompletableFuture
s 是组成异步执行的非常好的方法,但是如果您希望在取消未来时中断或停止底层执行,我们该怎么做呢?或者我们必须接受任何取消或手动完成CompletableFuture
都不会影响在那里完成它的线程?
也就是说,在我看来,这显然是一项需要 executor worker 时间的无用工作。我想知道在这种情况下哪种方法或设计可能会有所帮助?
更新
这是一个简单的测试
java - 如果 completableFuture 失败,如何记录?
我有这个方法:
它被不同的类广泛使用,但目前如果计算失败,则没有默认日志记录。我的第一种方法是:
但是这种方法是为了恢复,因为我必须返回一些东西。如果我只想记录它怎么办?
java-8 - Akka 演员和 Java8 CompletableFuture 可以安全地结合起来吗?
据我了解 Akka 文档,Akka ActorSystem 包含自己的线程池来执行演员。我在一个也使用 Java8 期货的 Java 应用程序中使用 Akka;后者由 ForkJoinPool.commonPool() 执行。因此,actors 和 futures 使用不同的池,这可能会破坏隐藏在两个调度程序中的某些假设(例如,Akka 调度程序可能假设 futures 在 Akka 池上运行)。这会产生任何性能问题吗?
java - Java CompletableFuture + Resteasy
我一直在像这样使用 Java 的 CompletableFuture
当我尝试在这段代码中使用 Resteasy Client 时,我得到一个
如果我在 completablefuture 之外使用客户端,它就可以工作。Resteasy 代码看起来像这样
我将在 completablefuture 之外运行 resteasy 代码来“修复”问题,但想了解为什么会发生这种情况。
CompletableFuture 中的 resteasy 代码如下所示:
CompletableFuture 之外的相同代码有效
java - 在 RxJava 中超时取消任务
我正在试验 RxJava 和 Java 8 的 CompletableFuture 类,但不太了解如何处理超时条件。
这基本上有效(如果达到三秒的超时,则发布“超时”)。但是,我还想取消我已经包装的未来任务Observable
- 以 RxJava 为中心的方法可能吗?
我知道一种选择是自己处理超时,使用task.get(3, TimeUnit.SECONDS)
,但我想知道是否可以在 RxJava 中完成所有任务处理。
java - 从列表转换到 CompletableFuture
我正在尝试转换List<CompletableFuture<X>>
为CompletableFuture<List<T>>
. 当您有许多异步任务并且需要获取所有这些任务的结果时,这非常有用。
如果其中任何一个失败,那么最终的未来就会失败。这就是我实施的方式:
要运行它:
如果其中任何一个失败,那么它就会失败。即使有一百万个期货,它也会按预期提供输出。我遇到的问题是:假设有超过 5000 个期货,如果其中任何一个失败,我会得到StackOverflowError
:
java.util.concurrent.CompletableFuture.internalComplete(CompletableFuture.java:210) 在 java.util.concurrent.CompletableFuture$ThenCompose.run(CompletableFuture.java) 的线程“pool-1-thread-2611”java.lang.StackOverflowError 中的异常:1487) 在 java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:193) 在 java.util.concurrent.CompletableFuture.internalComplete(CompletableFuture.java:210) 在 java.util.concurrent.CompletableFuture$ThenCompose.run( CompletableFuture.java:1487)
我做错了什么?
注意:当任何未来失败时,上面返回的未来会失败。接受的答案也应该采取这一点。
java - 将列表值顺序传递给单值消费者的最佳方法?
我在玩 Java8 的流和CompletableFuture
s。我预先存在的代码有一个类,它接受一个 URL 并下载它:
现在,这个类从另一个发出的部分List<String>
(单个主机上的多个目标)获取它的信息。
我已将周围的代码切换为CompletableFuture
:
现在,这感觉不自然。我正在产生一个String
s 流,而我FileDownloader
一次消耗其中一个。是否有现成的东西可以使我的单个值Consumer
与List
s 一起使用,还是我在for
这里陷入循环?
我知道将循环移入accept
并制作 a是微不足道的Consumer<List<String>>
,这不是重点。
java - 如何从类中返回一个对象实现Callable
我有一个实现的类,callable
我希望可调用类只返回一个类型的对象Mat
。我将 Future 列表声明如下:
但我收到Cannot instantiate the type Future<List<Mat>>
请让我知道我做错了什么?
代码:
java - 如何使用 CompletableFuture 返回一个值
我创建了一个示例,我想知道如何使用CompletableFuture
? 我也将其更改CompletableFuture<Void> exeFutureList
为CompletableFuture<Integer> exeFutureList
但 eclipse 总是建议将其设置回 Void。
请让我知道如何使用 CompletableFuture 返回值。
代码:
java - 如何使用 Netty 关闭 AsyncHttpClient 以进行异步 Http 请求?
当我们执行异步请求时,使用AsyncHttpClient
withNetty
提供程序将阻止主程序终止。例如,以下程序在 , 之后终止println
,具体取决于提供者是JDKAsyncHttpProvider
还是NettyAsyncHttpProvider
:
关于AsynHttpClient
文档状态:
AHC 是一个抽象层,可以在裸 JDK、Netty 和 Grizzly 之上工作。请注意,JDK 实现非常有限,您应该真正使用其他真正的提供程序。
要将 AsyncHttpClient 与 Netty 一起使用,我们只需在 java 类路径中包含相应的库。Program
因此,我们可以使用以下类路径配置之一运行先前的配置以使用 Netty,或者不使用:
-cp .;async-http-client-1.9.24.jar;netty-3.10.3.Final.jar;slf4j-api-1.7.12.jar
将使用NettyAsyncHttpProvider
-cp .;async-http-client-1.9.24.jar;slf4j-api-1.7.12.jar
将使用JDKAsyncHttpProvider
我们还应该做什么才能正确使用 Netty 提供者?例如,我正在关闭AsyncHttpClient
in AsyncCompletionHandler
。那是对的吗?
是否有任何配置可以改变观察到的行为?