java可以满足多任务之间的依赖协作关系,在java1.8新增了一种新的方式,主要涉及CompletionStage。
1. 概述
支持任务异步处理,进行任务编排,满足多任务之间的依赖协作关系。例如之前需要用callback,现在定义依赖关系。
2. 详情
代表一个异步的阶段,当一个CompletionStage完成后去执行另一个行为或计算。一个阶段正常结束后,可以顺序触发某些其他的依赖阶段。根据使用场景,接口定义了几组行为。
行为之一:使用Function、Comsumer、Runnable作为阶段行为的表现方式,依据上一阶段正常结束的结果是否作为下一阶段参数等因素来决定,如方法名中包含apply, accept, or run。注意:上一阶段必须正常结束,否则不会触发下一阶段。
行为之一:支持多种触发阶段行为的方式,如一个单独的阶段结束后(方法名包含then)、两个阶段都结束后(方法名包含both)、两个阶段中任一结束后(方法名包含either)。注意:上一阶段必须正常结束,否则不会触发下一阶段。
行为之一:依赖阶段的触发行为,不保证明确的顺序。同步执行、异步执行、自定义executor的异步执行。
行为之一:关注上一阶段的结果,无论正常结束还是异常结束。
whenComplete | 关注阶段的结果(包括正常结束结果和异常结果)。无法改变结果的引用。若通过get或join获取结果,是异常结果则抛出异常;若不调用get或join,即使是异常结果,也不会抛出异常。 |
handle | 关注阶段的结果(包括正常结果和异常结果),而且可以返回新的正常结果,异常不会被抛出。 |