问题标签 [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 堆栈溢出的行为,但发现它导致了成功,并且我的递归循环刚刚停止并退出,并且 junit 测试通过了。这真的不是我想要的行为。我想要一个快速失败的行为,所以我知道要修复我的代码。
我试图在 Eclipse 中调试计数 1455,但 Eclipse 冻结并且无法加载堆栈跟踪,所以我找不到这种行为背后的原因。
所以我的问题很简单
- 我的代码是否不正确?
- CompletableFuture 如何成功退出(或者在这种情况下我的 junit 测试用例如何通过)。
也许操作系统很重要……我在 Mac 上。我以前有自己的本土承诺,而那些成功地打破了堆栈。
java - 在保持线性可读性的同时委托给线程
我一直在尝试不同的方法来处理结果断开连接的阻塞方法,同时保持可能已被中断的状态。我发现必须处理发送和接收难以对齐的不同类和方法是令人沮丧的。
在下面的示例中,SomeBlockingMethod()
通常返回void
作为消息发送到其他进程。但相反,我synchronized
用一个接收结果的侦听器来实现它。通过将其旋转到一个线程,我可以wait()
超时或无限期地获得结果。
这很好,因为一旦返回结果,我就可以继续处理在等待线程任务结果时必须暂停的特定状态。
我的方法有什么问题吗?
尽管这个问题可能看起来很笼统,但我特意寻找有关Java线程的建议。
示例伪代码:
使用 CompletableFuture 更新:
或者更好:
严格使用的问题CompletableFuture
在于它CompletableFuture.thenAccept
是从全局线程池中运行的,并且不能保证与调用线程同步。
为同步任务添加调度程序可以解决这个问题:
CompletableFuture
与完整的调度程序方法相比,使用的一个警告是,存在于外部的任何先前状态都必须是最终的或有效的最终状态。
java - 为什么 CompletableFuture 的 thenAccept() 不在主线程上运行
我在 CompletableFuture 的 supplyAsync() 中处理长时间运行的操作,并将结果输入 thenAccept()。有时 thenAccept() 在主线程上执行,但有时它在工作线程上运行。但我只想在主线程上运行 thenAccept() 操作。这是示例代码。
结果是:
我怎样才能解决这个问题 ?
java - 如何在不阻塞的情况下启动 CompletableFuture 并在完成后执行某些操作?
CompletableFuture
API 相当吓人,有很多接受,然后和其他东西;很难说为什么存在不同的选择。
我基本上是在尝试模仿一个new Thread(() -> dostuff).start()
但具有更好的线程池、错误处理等。注意:我实际上并不需要Runnable
这里的接口,我正在生成一段现有的代码。
启动异步任务并在完成后执行行为的正确方法是什么?或处理抛出的异常?
java - CompletableFuture 的分离异常处理
我意识到我希望我们 API 的使用者不必处理异常。或者更清楚地说,我想确保始终记录异常,但只有消费者知道如何处理成功。如果客户愿意,我希望客户也能够处理异常File
,我无法返回给他们。
注:FileDownload
是一个Supplier<File>
我真的不明白这些CompletionStage
东西。我使用exception
orhandle
吗?我返回原来的未来还是他们返回的未来?
java - 如何在完成时异步重新加入原始线程?
尽管我不认为这是 Vaadin 特定的问题。我真正需要做的就是重新加入未来在完成时创建的线程。
我需要这些线程 ID 相同,显然我可以重做这个。我知道有一个加入,但现在确定当我在完成之前不想重新加入时这对我有什么帮助?
java - 如何将一种类型的 CompletableFuture 转换为另一种类型?
我目前将我的转换CompletableFuture<X>
为CompletableFuture<Void>
如下所示,但我想知道是否有更好的方法。
java - 一个可以传递给ExecutorService的对象,并且在Runnables之间有依赖关系
我正在尝试创建一个具有依赖关系的对象。关键是,具有 ExecutorService 的类和生成 Runnables 的类是不同的。这是简单的抽象:
当这些类是一个时,我曾经使用 CompletableFuture:
但现在pool
居住在另一个班级。我看到 CompletableFuture 类的文档更多,但我仍然不确定它是否有帮助。
有没有人在这里有一些知识?
java - CompletableFuture 链接结果
我正在尝试将方法的调用/结果链接到下一个调用。我得到编译时错误 methodE 因为如果我无法从之前的调用中获取 objB 的引用。
如何将上一个调用的结果传递给下一个链?我完全误解了这个过程吗?
asynchronous - 如何转换 CompletableFuture> 到流无阻塞
我正在使用Async Http Client 库(使用 Netty)向 RESTful API 发出异步 Http Get 请求。由于我想保留非阻塞行为,因此我将返回实例CompletableFuture<T>
作为 Http Get 请求的结果。所以,当一个 RESTful API 端点返回一个 Json 数组时,我返回一个CompletableFuture<T[]>
.
然而,根据 Erik Meijer 对编程中的四个基本效果所做的分类,我认为这Stream<T>
更适合发出异步 Http Get 请求并返回 Json 数组的 Java 方法的结果。在这种情况下,我们可以将Stream<T>
视为Observable<T>
等价物,它是返回许多值的异步计算的结果。
因此,考虑到resp
保持响应,那么我可以得到CompletableFuture<Stream<T>>
如下结果:
但是,我想知道如何在不等待计算完成的情况下将其转换CompletableFuture<Stream<T>> resp
为 a Stream<T>
(即我不想阻止get()
调用)?
我希望得到与以下表达式相同的结果,但不阻塞get()
: