【问题标题】:Completablefuture - advantage of using thenapply vs using lambda blockCompletablefuture - 使用 thenapply 与使用 lambda 块的优势
【发布时间】:2017-05-23 18:56:40
【问题描述】:

我想知道使用 lambda 块与使用 thenApply() 的优势。

我知道 lambda 块总是由执行 supplyAsync() 中的函数的同一线程执行,而 thenApply() 块可以由执行 supplyAsync() 的线程或调用者线程执行。

我还想知道,如果 thenApply() 必须在 supplyAsync() 函数执行后才执行,为什么它会被调用者线程执行。

CompletableFuture.supplyAsync(() -> {return doSomethingAndReturnA();})
                 .thenApply(a -> convertToB(a));

CompletableFuture.supplyAsync(() -> {
    A a = doSomethingAndReturnA();
    convertToB(a);
});

【问题讨论】:

    标签: java asynchronous java-8 completable-future


    【解决方案1】:

    使用 lambda 块,您可以保证在同一个线程中调用这两个方法,而不会在其间在该线程上运行任何其他方法。

    thenApply() 在您已经有 CompletionStage/CompletableFuture(例如,在变量中或由某些方法调用返回)并且您希望对其结果进行后续处理时更有用。

    当您想要访问 lambda 范围之外的中间结果(此处为 a)时,它也很有用,因为您可以在中间 CompletableFuture 上通过 joint() 访问它。

    更高级的thenApplyAsync() 还允许您异步处理中间结果,这在 lambda 块中是很困难的。

    在某些情况下,您可能只是根据可读性选择其中之一。

    【讨论】:

      猜你喜欢
      • 2017-03-08
      • 1970-01-01
      • 2015-08-18
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      相关资源
      最近更新 更多