加入CompletableFuture与同步方法

时间:2017-07-04 00:35:49

标签: java java-8 java-stream completable-future

有:

String getData(String key){
    // Slow operation
}

CompletableFuture<String> getDataAsync(String key){
    return CompletableFuture.supplyAsync(() -> getData(key));
}

以下是什么区别?

A)

keyStream.map(key -> getData(key));

b)中

keyStream.map(key -> getDataAsync(key).join());

在这种情况下使用异步是否有任何好处?

2 个答案:

答案 0 :(得分:1)

IF 方法a和b中的流是顺序的。他们之间没有什么不同,你应该避免使用它。因为您只需在getData&amp;中运行ForkJoinPool.commonPool()加入map方法,直到getData完成。

IF 方法a和b中的流都是并行的。他们之间也没有什么不同,你也应该避免使用它。因为并行流已经使用ForkJoinPool.commonPool()进行操作。

答案 1 :(得分:0)

用法Async在你的例子中没有区别,因为你正在调用join,所以join是阻塞调用而Async将不再是ASync