Ebr*_*ee' 20 java concurrency completable-future
我已经在每一个中看到了一个例子,但是我需要确切地知道深层有什么不同,因为有时候我认为我可以使用它们来获得相同的结果,所以我想知道我可以选择正确的一?
使用它们各有什么好处?
像这个例子一样,两个都有效:
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);
}
Run Code Online (Sandbox Code Playgroud)
这个例子运行于
Play framework.
Ous*_* D. 12
CompletionStage<T>是一个接口,它CompletabeFuture<T>是此接口的唯一实现类.通过查看java doc CompletionStage<T>,您会注意到CompletionStage接口提供了获取一个CompletionStage并将其转换为另一个的方法CompletionStage.但是,CompletionStages返回的这些对象实际上是它们自己的CompletabeFuture<T>对象.
因此使用CompletabeFuture<T>与使用a相同,CompletionStage<T>但后者可以用作未来可能的新类的基本接口,也可以作为许多降序类型的目标类型,就像我们倾向于做List<Integer> integerList = new ArrayList<>();而不是ArrayList<Integer> integerList = new ArrayList<>();
您可以阅读CompletionStage和CompletableFuture的帖子介绍,了解更多详情.
Xia*_*iao 11
A CompletableFuture是一个CompletionStage.但是,顾名思义,它就是
complete或
完成completeExceptionally.Future:您可以使用get方法等来获得结果.恕我直言,在大多数API中,就像在你的例子中一样,你应该使用CompletionStage,因为
complete调用者公开类似的方法.get由提供的阻塞调用Future.| 归档时间: |
|
| 查看次数: |
7911 次 |
| 最近记录: |