Java8新特性整理之CompletableFuture:组合式、异步编程(七)

使用CompletableFuture构建异步应用

Future 接口的局限性

Future接口可以构建异步应用,但依然有其局限性。它很难直接表述多个Future 结果之间的依赖性。实际开发中,我们经常需要达成以下目的:

  • 将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。
  • 等待 Future 集合中的所有任务都完成。
  • 仅等待 Future集合中最快结束的任务完成(有可能因为它们试图通过不同的方式计算同一个值),并返回它的结果。
  • 通过编程方式完成一个Future任务的执行(即以手工设定异步操作结果的方式)。
  • 应对 Future 的完成事件(即当 Future 的完成事件发生时会收到通知,并能使用 Future 计算的结果进行下一步的操作,不只是简单地阻塞等待操作的结果)

新的CompletableFuture类将使得这些成为可能。

CompletableFuture

JDK1.8才新加入的一个实现类CompletableFuture,实现了Future<T>, CompletionStage<T>两个接口。

当一个Future可能需要显示地完成时,使用CompletionStage接口去支持完成时触发的函数和操作。

当两个及以上线程同时尝试完成、异常完成、取消一个CompletableFuture时,只有一个能成功。

CompletableFuture实现了CompletionStage接口的如下策略:

  1. 为了完成当前的CompletableFuture接口或者其他完成方法的回调函数的线程,提供了非异步的完成操作。

  2. 没有显式入参Executor的所有async方法都使用ForkJoinPool.commonPool()为了简化监视、调试和跟踪,所有生成的异步任务都是标记接口AsynchronousCompletionTask的实例。

  3. 所有的CompletionStage方法都是独立于其他共有方法实现的,因此一个方法的行为不会受到子类中其他方法的覆盖。

CompletableFuture实现了Future接口的如下策略:

  1. CompletableFuture无法直接控制完成,所以cancel操作被视为是另一种异常完成形式。方法isCompletedExceptionally可以用来确定一个CompletableFuture是否以任何异常的方式完成。

  2. 以一个CompletionException为例,方法<

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 19
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
Java 8引入了许多新的特性和改进,以下是其中一些主要的特性: 1. Lambda 表达式:Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。它简化了代码编写,使得函数式编程更加方便。 2. 函数式接口:Java 8引入了函数式接口的概念,即只有一个抽象方法的接口。函数式接口可以与 Lambda 表达式一起使用,提供了更加灵活的编程方式。 3. 方法引用:方法引用允许直接通过方法的名称来引用方法,而不需要使用 Lambda 表达式来定义。方法引用简化了代码编写,提高了可读性。 4. 默认方法:接口中可以定义默认方法,即接口可以提供一些默认实现。这样,在接口的实现类中可以直接使用默认方法,而不需要重新实现。 5. Stream API:Stream API 提供了一种新的处理集合数据的方式,可以进行流式操作、过滤、映射等操作。它提供了一种更加简洁、灵活和高效的集合处理方式。 6. 新的日期/时间 API:Java 8引入了全新的日期/时间 API(java.time包),提供了更加简洁和易用的日期和时间处理方式。 7. CompletableFutureCompletableFuture 是一种新的异步编程模型,可以更方便地执行异步操作和处理异步结果。 8. 接口的静态方法和私有方法:Java 8允许在接口中定义静态方法和私有方法,使得接口具备更多的灵活性和可扩展性。 除了以上列出的特性,Java 8 还带来了一些其他的改进,如重复注解、类型注解、新的编译器工具等。这些特性一起使得 Java 8 成为一个更加现代化和强大的编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一大三千

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值