CompletableFuture使用与解读,移动开发者

本文详细探讨了Java中的CompletableFuture类,包括其2.3流结果设置、3.源码解读,尤其是3.3节中thenRun系列、thenCompose系列的执行原理。文章指出,尽管CompletableFuture提供了丰富的异步编程接口,但使用起来需要深入理解其内部机制。作者强调,技术虽快速变化,但基础知识至关重要,并希望分享更多技术点。
摘要由CSDN通过智能技术生成

}.whenComplete { t, u -> println(“second handler $t”)}
ff.obtrudeValue(null)

2.3 流结果设置

这里也通过表格方式,有下面几种方法

CompletableFuture结果设置.png

我们通过构造器生成时,需要自己设置值,如下

val ff = CompletableFuture()
ff.thenApply {
it / 2 + 4
}
ff.complete(16)

设置值后,后面的流才会执行

3. 源码解读

CompletableFuture是流的一个节点,内部持有了完成状态以及依赖其的任务

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

节点信息,其内部同样实现了完成态时依赖任务执行处理;

3.1 数据结构

这主要体现这两个成员变量上

volatile Object result;
volatile Completion stack;

  • result:结果为null,表示未执行;执行结果为空,则设置为静态常量NIL,异常则设置为AltResult实例,正常完成,则表示实际的值; AltResult内容如下

static final AltResult NIL = new AltResult(null);
static final class AltResult {
final Throwable ex;
AltResult(Throwable x) { this.ex = x; }
}

  • stack:链表尾部指针,组成了后进先出的链表结构;是依赖当前完成状态需要执行的任务集合;内容如下,其实现ForkJoinTask,只是为了利用ForkJoinPoo线程池,其最大有点就是解决频繁的异步任务的,很配

abstract static class Completion extends ForkJoinTask
implements Runnable, AsynchronousCompletionTask {
volatile Completion next;
abstract CompletableFuture<?> tryFire(int mode);

abstract boolean isLive();
public final void run() { tryFire(ASYNC); }
public final boolean exec() { tryFire(ASYNC); return false; }
public final Void getRawResult() { return null; }
public final void setRawResult(Void v) {}
}

对于s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值