我想知道使用lambda block与使用thenApply()
的优势。
我理解lambda块总是由执行supplyAsync()
中的函数的同一线程执行,而thenApply()
块可以由执行supplyAsync()
的线程或调用者线程执行。
我还想知道如果thenApply()
只有在supplyAsync()
函数执行后才能执行,为什么它会被调用者线程执行。
CompletableFuture.supplyAsync(() -> {return doSomethingAndReturnA();})
.thenApply(a -> convertToB(a));
CompletableFuture.supplyAsync(() -> {
A a = doSomethingAndReturnA();
convertToB(a);
});
答案 0 :(得分:0)
使用lambda块,可以保证在同一个线程中调用这两个方法,而不会在其间运行任何其他方法。
当您已经拥有thenApply()
/ CompletionStage
(例如在变量中或通过某种方法调用返回)并且您希望对其结果进行后续处理时, CompletableFuture
会更有用。
当您想要访问lambda范围之外的中间结果(此处为a
)时,它也很有用,就像在中间joint()
上只能CompletableFuture
一样访问它。
更高级thenApplyAsync()
还允许您异步处理该中间结果,这在lambda块中很难。
在某些情况下,您可能只是根据可读性选择其中一种。