知识卡片
串行依赖选方法
内容
thenApply、thenAccept、thenRun、thenCompose 都表达串行依赖,区别在参数类型:thenApply 接收结果返回新值;thenAccept 接收结果不返回;thenRun 都不涉及——三者返回值都不能再链式调度。thenCompose 本质不同:要求第二个任务返回 CompletionStage,可继续链式调用,见 [[Compose避免嵌套]]。
参考来源
- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第10章《CompletableFuture异步回调》10.2.5节《4个任务串行方法的区别》(源文件:_epub-src/OEBPS/Text/chapter311.xhtml)
- 结论依据:原文说明“thenApply()、thenRun()、thenAccept()这三个方法的不同之处主要在于其核心参数fn、action、consumer的类型不同,分别为Function<T,R>、Runnable、Consumer<? super T>类型”,并指出“thenCompose()的返回值是一个新的CompletionStage实例,可以持续用来进行下一轮CompletionStage任务的调度”而“thenApply()的返回值……通过thenApply()所返回的值不能进行下一轮CompletionStage链式(或者流式)调用”,因此推出本卡结论。
- 原始内容:thenApply()、thenRun()、thenAccept()这三个方法的不同之处主要在于其核心参数fn、action、consumer的类型不同……thenCompose()的返回值是一个新的CompletionStage实例,可以持续用来进行下一轮CompletionStage任务的调度……thenApply()的返回值……通过thenApply()所返回的值不能进行下一轮CompletionStage链式(或者流式)调用。