[英]Completablefuture - advantage of using thenapply vs using lambda block
我想知道使用lambda块与使用thenApply()
。
我了解到lambda块总是由执行supplyAsync()
的函数的同一线程执行,而thenApply()
块可以由执行supplyAsync()
的线程或调用者线程执行。
我还想知道,如果thenApply()
仅在执行supplyAsync()
函数之后supplyAsync()
执行,为什么调用者线程会执行它呢?
CompletableFuture.supplyAsync(() -> {return doSomethingAndReturnA();})
.thenApply(a -> convertToB(a));
CompletableFuture.supplyAsync(() -> {
A a = doSomethingAndReturnA();
convertToB(a);
});
使用lambda块,可以保证在同一个线程中调用这两种方法,而在此线程之间没有其他任何运行。
如果您已经具有CompletionStage
/ CompletableFuture
(例如,在变量中或由某个方法调用返回),并且您希望对其结果进行后续处理,那么thenApply()
会更加有用。
当您想访问lambda范围之外的中间结果(此处a
)时,它也很有用,因为您可以只对中间CompletableFuture
上的joint()
进行访问。
更高级的thenApplyAsync()
也允许您异步处理该中间结果,这在lambda块中很难实现。
在某些情况下,您可能只是基于可读性来选择一个或另一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.