异步任务调度工具CompleteFeature

异步任务调度工具CompleteFeature

CompleteFeature简介

CompleteFeature是对Feature的增强,Feature只能处理简单的异步任务,而CompleteFeature可以将多个异步任务进行复杂的组合,支持串行执行,并行执行,And汇聚,Or汇聚,从而能对复杂的关联任务进行调度。

CompleteFeature支持的业务场景

串行任务

串行任务指任务B要等待任务A执行完成之后才会执行,串行任务有如下属性:

属性 描述
可获取 A 的结果 任务 B 可获取任务 A 的执行结果作为参数使用
B 有返回值 如果任务 B 有返回值,可以将执行结果通过返回值返回
可获取 A 异常 任务 B 可以获取任务 A 抛出的异常
A 异常则终止 当任务 A 抛出异常后,程序是否会终止,若会终止,程序将退出,任务 B 不会执行,否则程序不会退出,继续执行

CompleteFeature支持的串行任务方法如下:

方法 可获取 A 的结果 B 有返回值 可获取 A 异常 A 异常则终止
thenRun
thenApply
thenAccept
thenCompose
whenComplete
exceptionally
handle

总结

  1. 任务不会抛出异常就使用前四个方法,否则使用后三个方法。
  2. exceptionally相当于try {} catch {}catch部分,whenCompletehandle相当于try {} catch {} finally {}catchfinall部分,区别是一个有返回值,一个没有返回值。
  3. thenApplythenCompose的区别是,thenCompose在任务 B 中返回的是CompletableFuture,可参考后面的例子对比差异。

And汇聚关系

And汇聚关系是指:任务 C 要等待任务 A 和任务 B 都执行完后才执行。CompleteFeature 支持此关系的方法如下:

方法 C 接收 A 和 B 返回值作为参数 C 有返回值
thenCombine
thenAcceptBoth
runAfterBoth

Or汇聚关系

Or 汇聚关系是指:任务 C 等待任务 A 或任务 B 其中一个执行完后就执行,即 C 只需等待最先执行完成的任务后就可执行。CompleteFeature 支持此关系的方法如下:

方法 C 接收 A 或 B 返回值作为参数 C 有返回值
applyToEither
acceptEither
runAfterEither

多任务

CompletableFuture 提供了两个多任务的方法:

方法 描述
anyOf 多个任务中的任意一个任务执行完则结束,可以获取到最先执行完的任务的返回值
allOf 多个任务都执行完后才结束,不能获取到任何一个任务的返回值

以上所有方法的返回值都是 CompletableFuture ,这样就可以继续调用前面描述的方法来进行任务组合,组合出更加复杂的任务处理流程。

方法族

以上方法中的最后一个任务都是和前面的任务在一个线程内执行,CompletableFuture中 还有一套方法让最后一个任务在新线程中执行,只要在原方法上加上 Async 后缀则可,例如:

同步 异步
thenApply thenApplyAsync
thenAccept thenAcceptAsync
thenRun thenRunAsync
thenCompose thenComposeAsync

本文转载自:

Java并发编程入门(十九)异步任务调度工具CompleteFeature - 掘金 (juejin.cn)