当前位置: 首页 > 知识库问答 >
问题:

“CompletionStage”和“CompletableFuture”有什么区别

罗智志
2023-03-14

我在他们每一个都看到了一个例子,但我需要确切地知道在深层上有什么不同,因为有时我认为我可以用他们两个得到相同的结果,所以我想知道,以便我可以选择正确的?

使用它们每一个都有什么好处?

这两个例子都起作用:

public CompletionStage<Result> getNextQueryUUID() {
    return CompletableFuture.supplyAsync(() -> {
        String nextId = dbRequestService.getNextRequestQueryUUID();
        return ok(nextId);
    }, executor);
}


public CompletableFuture<Result> getNextQueryUUID() {
    return CompletableFuture.supplyAsync(() -> {
        String nextId = dbRequestService.getNextRequestQueryUUID();
        return ok(nextId);
    }, executor);
}

此示例运行在Play Framework中。

共有1个答案

松英喆
2023-03-14

CompletionStage 是一个接口,其中CompletableFuture 是当前唯一的实现类。通过查看CompletionStage 的javadoc,您将注意到它提供了获取一个CompletionStage 并将其转换为另一个CompletionStage 的方法。但是,CompletionStage 返回的值实际上本身就是CompletabeFuture 对象。

因此,使用CompletabeFuture 与使用CompletionStage 是一样的,但后者可以用作将来可能出现的新类的基接口,也可以作为许多降序类型的目标类型,正如我们倾向于使用List integerList=new ArrayList<>(); 而不是ArrayList integerList=new ArrayList<>();

您可以阅读CompletionStage和CompletableFuture的post介绍以了解更多细节。

 类似资料:
  • 问题内容: 假设我有以下代码: 案件: 这里输出将2.现在的情况: 我在这个博客中读到,每个步骤都是在单独的线程中执行的,并且“同时”执行(这意味着在先于结束之前先开始执行),如果是这样,那么如果第一步没有完成,那么第二步的输入参数值是多少? 如果第二步不采取措施,第一步的结果将流向何方?第三步将采取哪一步的结果? 如果第二步必须等待第一步的结果,那么意义何在? 这里x-> x + 1只是为了说明

  • 这里的输出将是2。现在,对于: 我在这篇博客中读到,每个在一个单独的线程中执行,并且“同时”(这意味着在前面的完成之前启动)。如果是,如果第一步没有完成,第二步的输入参数值是什么? 如果没有第二步迈出,第一步的成果将何去何从?第三步会采取哪一步的结果?

  • 在构建API时,编写接口代码是一个很好的实践,因此返回CompletionStage似乎是一个最好的方法。然而,我意识到我碰巧总是在获得CompletionStage之后调用.ToCompletableFuture。在这种情况下,推荐的方法是什么?

  • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。

  • 本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块  

  • 问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。