Completablefuture - 使用thenapply与使用lambda块的优势

时间:2017-05-23 18:56:40

标签: java asynchronous java-8 completable-future

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

当您已经拥有thenApply() / CompletionStage(例如在变量中或通过某种方法调用返回)并且您希望对其结果进行后续处理时,

CompletableFuture会更有用。

当您想要访问lambda范围之外的中间结果(此处为a)时,它也很有用,就像在中间joint()上只能CompletableFuture一样访问它。

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

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