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

java - What is the recommended way to wait till the Completable future threads finish

I am using CompletableFuture as shown below in the code. But concerning the way I should wait till all runnables finish, I found two ways and I do not know the difference between them and which one is the best practice? They are as follows:

Code:

First approach to wait till all runnables finish:

Second approach to wait till all runnables finish:

Please let me know which one is recommended.

0 投票
2 回答
474 浏览

java - 如何避免对资源的并发访问?

我有四个线程使用 CompletableFuture 异步运行,如下面的代码所示。他们都应该访问“grownSeedXYList”。有时当我运行代码时,我没有收到任何错误,但有时我收到“java.util.concurrent.completionexception”,我认为这是因为“grownSeedXYList”不同步。

请让我知道如何同步“grownSeedXYList”?

更新

四个线程使用 Compltable future 运行

GrowSeedSERun 类

成长种子SE

0 投票
0 回答
441 浏览

java - MPSC 队列:干净地处理 CompletableFutures 列表

尝试异步实现排队到阻塞队列的任务列表。一个 BlockingQueue 被单个线程批量消耗并报告每个任务的完成。

例如。1) Web 请求生成一个List<Task>排队到 BlockingQueue 的队列,该队列由单线程消费者批量消费。2) 阻止 Web 请求,直到该请求的任务完成。3) 当单线程消费者完成该请求的所有任务时通知 webrequest。

我想有一个Map.Entry<CompletableFuture<Task>,Task>被推送到队列并通知对应于正在处理的任务的一个complete()CompletableFuturewebrequest 基本上等待所有期货完成。

有没有更好的(更清洁的)方法来实现这种用例?

0 投票
1 回答
8081 浏览

java - CompletableFuture 何时真正完成?

这是MCVE

有点奇怪,没有真正完成CompletableFuturefrom allOf(...),例如调用 its join(),我得到以下输出:

我可以知道是什么导致 JVM 处理/认为r11 个(估计数量)依赖CompletableFuture,而它决定直接完成r2r3?我能看到的唯一区别就是try-catch,那么答案就这么简单吗?

作为比较,当我join()最后实际执行 a 时,我得到了 5 秒的预期等待时间和以下输出。如果有帮助,我会在 Java 8 Update 40 JVM 上遇到这个问题。

修改:

输出:

0 投票
0 回答
1543 浏览

java - CompletableFuture 重用

根据Java 8:CompletableFuture 的权威指南CompletableFuture 对象只能完成一次。当我发现它时,我想到了一个简单的界面:

目的是让一个线程能够调用waitFor(),以便它等到另一个线程调用complete()

显然它不是那样工作的。第一次发生这样的循环它工作正常但是第二次; 在完全不同的类上,它不会等待,并且complete()CompletableFuture 类的方法返回 false。

所以我想,好吧,它只能完成一次,那为什么不创建一个新实例来“重置”它呢?无论如何,我只使用一次该值。那是行不通的。事实上,它完全崩溃了。当我尝试创建一个新实例时,我的程序会陷入死锁!

这篇文章还谈到了一种在不完成未来的情况下传递价值的方法(obtrudeValue())。我试过这个,但结果与complete()方法相同。

我可以做些什么来防止这种情况或具有我想要的功能的替代方法吗?

0 投票
2 回答
13769 浏览

java - 如何修复 java.util.concurrent.CompletionException:java.lang.StackOverflowError

我正在编写一个递归代码来根据像素值相似性对对象进行轮廓化。正如您在下面的代码中看到的,我正在使用四个线程异步工作,但在运行时我收到以下发布的错误,我不知道如何修复它。

收到错误

代码

成长种子SWRun

0 投票
1 回答
1039 浏览

java - 打破 CompletableFuture 的流程

我有某些使用 异步运行的流程CompletableFuture,例如:

因此,如果我的foo()回报null(将来)我需要尽快中断,否则,流程将继续。

现在我必须一直检查null,在以后的每个区块中;但这很丑陋。

这可能CompletableFuture吗?

编辑

CompletableFuture您可以定义您的异步任务流,这些任务一个接一个地执行。例如,你可能会说:

做A,当A完成后,做B,然后做C...

我的问题是关于打破这个流程并说:

做A,但如果结果是空中断;否则做B,然后做C...

这就是我所说的“打破流动”的意思。

0 投票
2 回答
260 浏览

java - 如何将供应商的返回值添加到 FutureList

我想使用CompletableFuture异步供应商运行下面发布的三种方法,这样,当 Executor 完成时,Futurelist应该分别包含从这三种方法返回的三个值。我知道如何使用Futurelist,例如:

但就我而言,我想要类似的东西:

请让我知道我该怎么做。

方法

compStabilityMeasure 方法实现

0 投票
1 回答
619 浏览

java - 打破 CompletableFutures 链

你可以像这样链接运行块CompletableFuture

我的函数返回一个CompletableFuture带有 2 个块的函数,因此用户可以根据需要继续链接更多。

用户可以这样使用:

我想.exceptionaly()在我的方法中添加处理程序(所以用户看不到它),但是如果我的任何块失败,它可能会破坏链和任何可能的用户链!换句话说 - 如果block1block2失败,我不想继续任何可能的用户块(block3),他可以链接到foo.

CompletableFuture额外的问题:在 Java 世界中还有比这更好的东西吗?

0 投票
1 回答
1834 浏览

java - 寻找一个使用 CompletableFuture 的例子

我正在使用的工具需要遍历目录结构,过滤掉某些文件类型并对其执行某些操作(与树遍历相比需要相当长的时间)。自然地,我实现了一个 Callable 接口并使用运行时定义的分配数量的线程异步运行工作负载。

我的询问是关于以下几个方面的:

  • 为了学习一些有趣的东西,如何重写以下工作代码以使用 CompletableFuture ?
  • 看来我的线程计时器执行错误。它只显示给定工作线程的最后经过时间。我将如何优雅地解决这个问题?

这是工作代码:

以下结构用于对此进行测试(在 ./test/pdfWalker 下):

测试代码的输出如下: