我在他们每一个都看到了一个例子,但我需要确切地知道在深层上有什么不同,因为有时我认为我可以用他们两个得到相同的结果,所以我想知道,以便我可以选择正确的?
使用它们每一个都有什么好处?
这两个例子都起作用:
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
中。
CompletionStage
是一个接口,其中CompletableFuture
是当前唯一的实现类。通过查看CompletionStage
的javadoc,您将注意到它提供了获取一个CompletionStage
并将其转换为另一个CompletionStage
的方法。但是,CompletionStage
返回的值实际上本身就是CompletabeFuture
对象。
因此,使用CompletabeFuture
与使用CompletionStage
是一样的,但后者可以用作将来可能出现的新类的基接口,也可以作为许多降序类型的目标类型,正如我们倾向于使用List
而不是ArrayList
您可以阅读CompletionStage和CompletableFuture的post介绍以了解更多细节。
问题内容: 假设我有以下代码: 案件: 这里输出将2.现在的情况: 我在这个博客中读到,每个步骤都是在单独的线程中执行的,并且“同时”执行(这意味着在先于结束之前先开始执行),如果是这样,那么如果第一步没有完成,那么第二步的输入参数值是多少? 如果第二步不采取措施,第一步的结果将流向何方?第三步将采取哪一步的结果? 如果第二步必须等待第一步的结果,那么意义何在? 这里x-> x + 1只是为了说明
这里的输出将是2。现在,对于: 我在这篇博客中读到,每个在一个单独的线程中执行,并且“同时”(这意味着在前面的完成之前启动)。如果是,如果第一步没有完成,第二步的输入参数值是什么? 如果没有第二步迈出,第一步的成果将何去何从?第三步会采取哪一步的结果?
在构建API时,编写接口代码是一个很好的实践,因此返回CompletionStage似乎是一个最好的方法。然而,我意识到我碰巧总是在获得CompletionStage之后调用.ToCompletableFuture。在这种情况下,推荐的方法是什么?
问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。
本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块
问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。