【问题标题】:join CompletableFuture vs synchronous method加入 CompletableFuture 与同步方法
【发布时间】:2017-12-07 07:14:57
【问题描述】:

拥有:

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());

在这种情况下使用异步有什么好处吗?

【问题讨论】:

  • 请多解释一下你的问题。
  • 没有区别:join() 将阻塞,直到结果可用。

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


【解决方案1】:

IF 方法 a 和 b 中的流是顺序的。它们之间没有区别,您应该避免使用它。因为您只需在ForkJoinPool.commonPool() 中运行getData 并加入map 方法,直到完成getData

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

【讨论】:

    【解决方案2】:

    在您的示例中使用 Async 不会产生影响,因为您正在调用 join ,因此 join 会阻止调用,并且 Async 将不再是 ASync

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      相关资源
      最近更新 更多