completable-future 相关问题

在Java 8中,可以显式完成的Future(设置其值和状态),并且可以包括在完成时触发的依赖函数和动作。

。then接受字符串

[当前,我的代码如下:client.sendAsync(request,BodyHandlers.ofString()).thenApply(HttpResponse :: body).thenAccept(System.out :: println).join()...

回答 1 投票 0

CompletableFuture.runAsync吞咽异常

[早上好,我不太了解CompletableFutures(我是一位经验丰富的开发人员,但是我发现它们并不特别直观!)。给定以下代码段:public ...

回答 1 投票 0

尝试等待CompletableFuture

有没有一种方法可以等待CompletableFuture一定的时间,然后再给出不同的结果,而又不会在超时后取消将来的结果?我有一项服务(我们称它为...

回答 1 投票 1

如何通过使用ExecutorService和CompletableFuture控制线程号,立即将响应返回给弹簧通量客户端?

我需要通过基于Spring的Rest Service API的非阻塞io并行调用两个下游系统。但是第一个下游系统容量是一次10个请求,第二个...

回答 1 投票 0

与RestAssured(spring-mock-mvc)调用对Controller的完全嘲笑(在Java中)

[早上好,我已经为此苦苦挣扎了一天,我无法回避我做错的事情。在此先感谢您的帮助!我有一个测试方法:@Test public void ...

回答 1 投票 0

根据值映射表验证JsonNodes列表的最佳方法是什么?

我有一个Map,其中包含对象的名称和ID。从我的服务中,我得到一个List,其中每个JsonNode都包含一个名称,并应包含一个ID。我想使用地图(这是...

回答 1 投票 1

停止供应商内部的CompletableFuture链接

我有这样的操作,public void createFuture(){CompletableFuture future = CompletableFuture.supplyAsync(()-> 5); future.thenApply(i-> {if(i == 5){...

回答 1 投票 3

CompletableFuture.get()等价于JavaScript Promise吗?

我最近从JAVA 8使用Typescript / Javascript进行编程。遇到异步/等待时,它使我想起了CompletableFuture。在Java中,无论方法的返回类型如何,我都可以调用...

回答 1 投票 0

返回void与返回CompletionStage ?]之间是否有任何区别? 更具体地说,这两个代码有什么区别,一个返回void,另一个返回CompletionStage<Void>? [使用void或CompletionStage<Void>中的一个相对于另一个有什么优势? 在代码示例2中,我没有使用x中的变量thenCompose。有没有更好的书写方式? 如果我在函数boolean中返回doValidation并检查true函数中的performTask是否是更好的做法? 代码示例1: public CompletionStage<Response> performTask(Request request) throws MyException { doValidation(request); return service.performTask(request).thenCompose(serviceResponse -> CompletableFuture.completedFuture(buildMyResponse(serviceResponse))); } private void doValidation(Request request) throws MyException { CompletableFuture.runAsync(() -> { // Validate if (*someCondition*) { throw new MyException(.....); } }); } 代码示例2: public CompletionStage<Response> performTask(Request request) throws MyException { return doValidation(request).thenCompose(x -> { return service.performTask(request).thenCompose(serviceResponse -> CompletableFuture.completedFuture(buildMyResponse(serviceResponse))); }); } private CompletionStage<Void> doValidation(Request request) throws MyException { return CompletableFuture.runAsync(() -> { // Validate if (*someCondition*) { throw new MyException(.....); } }); } 更具体地说,在这两段代码中有什么区别,一个返回void,另一个返回CompletionStage ?使用void或... ] 我正在解决您的第一个问题 What advantages of using one of void or CompletionStage<Void> over the other? 要了解差异,您应该尝试记录流程。它将帮助您确定两者的区别。 这里是一个与您采用的方法相似的示例。我提出了自己的示例,因为我不知道您的代码。 public class Test { public static void main(String[] args) { tryWithVoid(); // tryWithCompletionStageVoid(); } public static void tryWithVoid() { System.out.println("Started"); validate(null); System.out.println("Exit"); } public static void tryWithCompletionStageVoid() { System.out.println("Started"); validateCS(null).thenRun(() -> System.out.println("Validation complete")); System.out.println("Exit"); } public static CompletionStage<Void> validateCS(String val) { return CompletableFuture.runAsync(() -> { if (val == null) { System.out.println("Validation failed! value is null"); } }); } public static void validate(String val) { CompletableFuture.runAsync(() -> { if (val == null) { System.out.println("Validation failed! value is null"); } }); } } 如果运行tryWithVoid(),您将看到输出为: Started Exit Validation failed! value is null 而运行tryWithCompletionStageVoid()时将是: Started Validation failed! value is null Validation complete Exit [第一种方法,tryWithVoid(),它不等待操作完成。因此,该操作的结果可能适用于调用之后的代码,也可能不适用。 但是,在第二种方法tryWithCompletionStageVoid()中,它在运行下一阶段之前等待该阶段完成。 如果您在各个阶段之间没有依赖性,则可以使用void 区别在于,返回void后,您将无法执行链接到CompletableFuture的任何操作。 返回CompletableFuture<Void>时,您可以将其他内容链接到它。例如,根据需要调用thenRun(),thenRunAsync()或仅调用join()以等待其完成。 因此,取决于调用者是否关心CompletableFuture的状态,并希望应用附加的逻辑。 在您的情况下,在示例1中,doValidation()在单独的线程上运行,发生的任何事情实际上都是无关紧要的。 service.performTask()将独立于其发生,甚至可以在doValidation()之前开始和/或结束。 在示例2中,doValidation()必须成功完成,然后才能实际发生performTask()。因此,似乎该版本实际上是正确的版本。请记住,正在运行CompletionStage<Response> performTask()的 main 线程将完成并在设置管道后立即返回,实际的performValidation()可能仍在运行(甚至可能尚未启动)。 通过这种方式可以简化呼叫,如下所示: service.performTask(request).thenApply(this::buildMyResponse); 您不必再次将其包装在CompletableFuture中,只需用thenCompose()再次对其进行包装。

?使用void或...

回答 2 投票 0

为什么CompletableFuture.runAsync()并不总是提交给ForkJoinPool.commonPool()?

CompletableFuture.runAsync文档指出:返回一个新的CompletableFuture,它由运行给定操作的ForkJoinPool.commonPool()中运行的任务异步完成。 ...

回答 1 投票 0

使用CompletableFuture.runAsync()与ForkJoinPool.execute()

没有将执行程序传递给CompletableFuture.runAsync(),将使用公共的ForkJoinPool。相反,对于要执行的简单任务(例如,我不需要链接其他任务)...

回答 2 投票 2

为什么将来可完成的代码比并行流慢?

我有一段代码。该代码用于学习CompletableFuture。包com.test.omn.hello;导入java.util.ArrayList;导入java.util.List;导入java.util.concurrent ....

回答 2 投票 2

将CompletableFuture.runAsync()用于简单的异步任务

没有将执行程序传递给CompletableFuture.runAsync(),将使用公共的ForkJoinPool。相反,对于要执行的简单任务(例如,我不需要链接其他任务)...

回答 1 投票 1

根据值映射表验证JsonNodes列表(基于某些条件)的最佳方法是什么?

我有一个Map,其中包含对象的名称和ID。从我的服务中,我得到一个List,其中每个JsonNode都包含一个名称,并应包含一个ID。我想使用地图(这是...

回答 1 投票 0

我如何跳过正在完成的期货

下面的代码段巩固了可完成的未来。下面的问题是我的某些期货交易异常顺利,因此总的来说我的交易结果异常完美。来自Java ...

回答 1 投票 0

如何使用Mockito对具有CompletedFeature 。supplyAsync(()-> someMethodWithReturn()))的方法进行单元测试? ]

我有一个控制器类,带有方法something(),该方法对同一类的两个不同方法进行调用,并合并两个调用的结果。类Controller {...公共UDC doSomething(){...

回答 1 投票 0

Returning CompletableFuture 在条件函数中返回

我有一个用例,其中我必须从根据条件组成2个Completable Futures的函数中返回CompletableFuture 。以下是我现在拥有的-私人...

回答 1 投票 0

CompletableFuture runAsync内部的单元测试代码

[有人写了一段代码,称其为“可完成的未来”,它从事的活动是一次调用,而忘记了,即输出没有得到照顾(没有get()调用)。 CompletableFuture.runAsync(()-> {...

回答 1 投票 1

将CompletableFuture与EJb一起使用时撞墙

我正在尝试将CompletableFuture与在WildFly上运行的EBJ bean一起使用。我可以看到调试器到达远程Ejb并成功检索了结果,但是在向调用方类的Wayback中,我得到了...

回答 1 投票 2

返回包含CompletableFuture列表的CompletableFuture

我正在尝试使对多个API的调用更快。在下面的代码中,getFilteredEvents是当前同步的版本。我觉得map(x-> x.getFilteredEvents(...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.