问题标签 [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 投票
6 回答
17860 浏览

java - 如何中断 CompletableFuture 的底层执行

我知道CompletableFuture设计不会通过中断来控制其执行,但我想你们中的一些人可能会遇到这个问题。CompletableFutures 是组成异步执行的非常好的方法,但是如果您希望在取消未来时中断或停止底层执行,我们该怎么做呢?或者我们必须接受任何取消或手动完成CompletableFuture都不会影响在那里完成它的线程?

也就是说,在我看来,这显然是一项需要 executor worker 时间的无用工作。我想知道在这种情况下哪种方法或设计可能会有所帮助?

更新

这是一个简单的测试

0 投票
1 回答
2693 浏览

java - 如果 completableFuture 失败,如何记录?

我有这个方法:

它被不同的类广泛使用,但目前如果计算失败,则没有默认日志记录。我的第一种方法是:

但是这种方法是为了恢复,因为我必须返回一些东西。如果我只想记录它怎么办?

0 投票
1 回答
1590 浏览

java-8 - Akka 演员和 Java8 CompletableFuture 可以安全地结合起来吗?

据我了解 Akka 文档,Akka ActorSystem 包含自己的线程池来执行演员。我在一个也使用 Java8 期货的 Java 应用程序中使用 Akka;后者由 ForkJoinPool.commonPool() 执行。因此,actors 和 futures 使用不同的池,这可能会破坏隐藏在两个调度程序中的某些假设(例如,Akka 调度程序可能假设 futures 在 Akka 池上运行)。这会产生任何性能问题吗?

0 投票
0 回答
1029 浏览

java - Java CompletableFuture + Resteasy

我一直在像这样使用 Java 的 CompletableFuture

当我尝试在这段代码中使用 Resteasy Client 时,我得到一个

如果我在 completablefuture 之外使用客户端,它就可以工作。Resteasy 代码看起来像这样

我将在 completablefuture 之外运行 resteasy 代码来“修复”问题,但想了解为什么会发生这种情况。

CompletableFuture 中的 resteasy 代码如下所示:

CompletableFuture 之外的相同代码有效

0 投票
1 回答
7758 浏览

java - 在 RxJava 中超时取消任务

我正在试验 RxJava 和 Java 8 的 CompletableFuture 类,但不太了解如何处理超时条件。

这基本上有效(如果达到三秒的超时,则发布“超时”)。但是,我还想取消我已经包装的未来任务Observable- 以 RxJava 为中心的方法可能吗?

我知道一种选择是自己处理超时,使用task.get(3, TimeUnit.SECONDS),但我想知道是否可以在 RxJava 中完成所有任务处理。

0 投票
9 回答
42190 浏览

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)

我做错了什么?

注意:当任何未来失败时,上面返回的未来会失败。接受的答案也应该采取这一点。

0 投票
3 回答
1548 浏览

java - 将列表值顺序传递给单值消费者的最佳方法?

我在玩 Java8 的流和CompletableFutures。我预先存在的代码有一个类,它接受一个 URL 并下载它:

现在,这个类从另一个发出的部分List<String>(单个主机上的多个目标)获取它的信息。

我已将周围的代码切换为CompletableFuture

现在,这感觉不自然。我正在产生一个Strings 流,而我FileDownloader一次消耗其中一个。是否有现成的东西可以使我的单个值ConsumerLists 一起使用,还是我在for这里陷入循环?

我知道将循环移入accept并制作 a是微不足道的Consumer<List<String>>,这不是重点。

0 投票
0 回答
166 浏览

java - 如何从类中返回一个对象实现Callable

我有一个实现的类,callable我希望可调用类只返回一个类型的对象Mat。我将 Future 列表声明如下:

但我收到Cannot instantiate the type Future<List<Mat>>

请让我知道我做错了什么?

代码

0 投票
1 回答
11155 浏览

java - 如何使用 CompletableFuture 返回一个值

我创建了一个示例,我想知道如何使用CompletableFuture? 我也将其更改CompletableFuture<Void> exeFutureListCompletableFuture<Integer> exeFutureList但 eclipse 总是建议将其设置回 Void。

请让我知道如何使用 CompletableFuture 返回值。

代码

0 投票
1 回答
6388 浏览

java - 如何使用 Netty 关闭 AsyncHttpClient 以进行异步 Http 请求?

当我们执行异步请求时,使用AsyncHttpClientwithNetty提供程序将阻止主程序终止。例如,以下程序在 , 之后终止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 提供者?例如,我正在关闭AsyncHttpClientin AsyncCompletionHandler。那是对的吗?

是否有任何配置可以改变观察到的行为?