CompletableFuture CompletableFuture 是 Java 中的一个异步编程模型,旨在解决 Future 接口的局限性。CompletableFuture 完全继承了 Future 接口,并在此基础上进行了丰富的扩展,完美地弥补了 Future 上述的种种问题。 一、Future 的局限性 Future 接口是 Java 中的异步计算结果表示,它提供了 isDone() 方法来检测计算是否已经完成,并且在计算结束后,可以通过 get() 方法来获取计算结果。但是,Future 接口也存在着许多限制: * 并发执行多任务:Future 只提供了 get() 方法来获取结果,并且是阻塞的。所以,除了等待你别无他法; * 无法对多个任务进行链式调用:如果你希望在计算任务完成后执行特定动作,比如发邮件,但 Future 却没有提供这样的能力; * 无法组合多个任务:如果你运行了 10 个任务,并期望在它们全部执行结束后执行特定动作,那么在 Future 中这是无能为力的; * 没有异常处理:Future 接口中没有关于异常处理的方法。 二、CompletableFuture 与 Future 的不同 CompletableFuture 是 Future 接口的扩展和增强。它完整地继承了 Future 接口,并在此基础上进行了丰富地扩展,完美地弥补了 Future 上述的种种问题。更为重要的是,CompletableFuture 实现了对任务的编排能力。借助这项能力,我们可以轻松地组织不同任务的运行顺序、规则以及方式。 三、CompletableFuture 的核心设计 CompletableFuture 实现了 Future 和 CompletionStage 两个接口,并且只有少量的属性。Future 接口仅提供了 get() 和 isDone 这样的简单方法,仅凭 Future 无法为 CompletableFuture 提供丰富的能力。那么,CompletableFuture 又是如何扩展自己的能力的呢?这就不得不说 CompletionStage 接口了,它是 CompletableFuture 的核心,也是我们要关注的重点。 CompletionStage 接口是 CompletableFuture 的核心,也是我们要关注的重点。顾名思义,根据 CompletionStage 名字中的“Stage”,你可以把它理解为任务编排中的步骤。所谓步骤,即任务编排的基本单元,它可以是一次纯粹的计算或者是一个特定的动作。在一次编排中,会包含多个步骤,这些步骤之间会存在依赖、链式和组合等不同的关系,也存在并行和串行的关系。 四、CompletableFuture 的核心用法 CompletableFuture 的核心方法总共分为四类,而这四类方法又分为两种模式:同步和异步。同步:使用当前线程运行任务;异步:使用 CompletableFuture 线程池其他线程运行任务,异步方法的名字中带有 Async。 1.runAsync(不接收参数、不返回参数) runAsync() 是 CompletableFuture 最常用的方法之一,它可以接收一个待运行的任务并返回一个 CompletableFuture。 2.thenApply(返回参数) thenApply() 方法可以将前一个任务的结果作为下一个任务的输入参数。 3.thenCompose(返回参数) thenCompose() 方法可以将前一个任务的结果作为下一个任务的输入参数,并且可以对结果进行进一步的处理。 4.handle(返回参数) handle() 方法可以对任务的结果进行处理,并且可以捕捉到异常。 五、CompletableFuture 的优点 * 异步编程模型:CompletableFuture 提供了异步编程模型,能够轻松地组织不同任务的运行顺序、规则以及方式。 * 链式调用:CompletableFuture 支持链式调用,可以将多个任务组合成一个任务。 * 异常处理:CompletableFuture 提供了异常处理机制,可以捕捉到任务中的异常。 * 高效性:CompletableFuture 可以提高系统的并发性和响应速度。 CompletableFuture 是 Java 中的一个异步编程模型,旨在解决 Future 接口的局限性。它提供了丰富的能力,能够轻松地组织不同任务的运行顺序、规则以及方式。
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![jar](https://img-home.csdnimg.cn/images/20210720083455.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/88768886/bg1.jpg)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/261a8b62f2eb49eda31a6b6627710137_qq_35932990.jpg!1)
- 粉丝: 286
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)