CompletableFuture是由Java 8引入的,在Java8之前我们一般通过Future实现异步。
- Future用于表示异步计算的结果,只能通过阻塞或者轮询的方式获取结果,而且不支持设置回调方法,Java 8之前若要设置回调一般会使用guava的ListenableFuture,回调的引入又会导致臭名昭著的回调地狱
- CompletableFuture对Future进行了扩展,可以通过设置回调的方式处理计算结果,同时也支持组合操作,支持进一步的编排,同时一定程度解决了回调地狱的问题。
因此,CompletableFuture
的主要作用是弥补Future
需要阻塞获取结果,CompletableFuture
根据主任务执行结果自动执行依赖任务,无需阻塞主线程等待主任务执行完。
当然是在CompletableFuture
这个操作定义是异步执行的,无需获取同步结果的前提下
CompletableFuture原理为:异步执行主任务,将依赖任务加入到链表中,主任务执行完从链表中获取依赖任务执行。
这时会有个疑问,依赖任务还没加入到链表中,主任务就执行完了,怎么办?
所以添加依赖任务的时候,会判断主任务是否执行完,如果执行完则立即执行依赖任务,不添加到链表中。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容