CompletableFuture组合式异步编程

一、引入背景

1. 异步计算:调用一个函数,无需等待被调用函数的返回结果,接着执行程序

2. 可以启动线程进行异步计算

3. 使用Future异步计算,可以拿到计算结果,可以结合线程池使用

4. Future的缺点:阻塞式或者轮询等待结果,并且很难直接表述多个future的结果之间的依赖性

5. CompletableFuture是Future的优化,可以进行组合

二、CompletionStage接口

1. CompletionStage表示异步计算过程中的某一个阶段

2. 一个阶段完成后,可能会触发另一个阶段

3. 一个阶段的执行:Function, Consumer, Runnable

扫描二维码关注公众号,回复: 10723371 查看本文章

三、CompletableFuture类

1. 实现了Future接口(明确完成的Future)和CompletionStage接口(某个完成阶段)

2. 创建CompletableFuture对象,有四种方法

public static CompletableFuture<Void> runAsync(Runnable runnable)
public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)

四、使用CompletableFuture对象

1. 变换结果

2. 消费结果

3. 结合两个CompletionStage的结果,转化后返回

4. 两个CompletionStage,谁计算的快,就用哪个的结果进行下一步处理,thenApply

5. 出现异常后用exceptionally进行补偿

参考:

https://www.cnblogs.com/happyliu/archive/2018/08/12/9462703.html

https://www.cnblogs.com/cjsblog/p/9267163.html

https://blog.csdn.net/moonpure/article/details/81080427

https://segmentfault.com/a/1190000019571918

猜你喜欢

转载自www.cnblogs.com/june0816/p/11442827.html