CompletableFuture学习

一 基础知识

参考学习资料-B站

P1

  1. Future优势
    相比于所有任务都直接在主线程处理,有很多优势,但有以下不足
    • 在没有阻塞情况下,无法对Future结果执行进一步的操作。
      Future不会告知你它什么时候完成,如果想得到结果必须通过get(),该方法会阻塞到结果可用为止。它不具备将回调函数附加到Future后并在Future的结果可用时自动调用回调的能力。
    • 无法解决任务相互依赖的问题。
    • 不能将多个Future合并在一起,假设你有多种不同的Future,你想在它们全部并行完成后然后再运行某个函数,Future很难独立完成这一个需要。
    • 没有异常处理。
      Future提供的方法中没有专门的API应对异常处理,还需要开发者手动异常处理。
  2. CompletableFuture优势
  • 实现了Future和CompletionStage接口
  • 为快速创建、链接依赖和组合多个Future提供了大量的便利方法;
  • 提供了适用于各种开发场景的回调函数,全面的异常处理支持;
  • 无缝连接和亲和lambda表达式和Stream-API

P6 异步任务概述

一. 创建异步任务

  1. runAsync
    当需要异步运行某些耗时的后台任务,并且不想从任务中返回任何内容,则可使用CompletableFuture.runAsync()方法,它接收一个Runnable接口的实现类对象,返回CompleteableFuture对象
    • 异步任务的底层还是新建一个线程的方式实现的

P15 异步任务的编排

  1. thenCompse 用来连接两个依赖关系的异步任务,结果由第二个任务返回;
  2. 方法
    • thenCompose、thenComposeAsync
    • thenApply、thenApplyAsync

P16

  1. 编排2个非依赖关系的异步任务thenCombine()
    • thenCombineAsync
    • thenCombine
    • 用于合并两个没有关系的任务。
  2. 合并多个异步任务allOf、anyOf
    • 可编排任意数量的CompletableFuture。
    • allOf: 适合合并多个异步任务
    • anyOf: 当给定的多个异步任务中有任意一个Future完成时需要执行一些操作,可使用anyOf方法;
  3. exceptionally()
  4. handle()
    • 常用来恢复回调链中的一次特定异常,回调链恢复后可进一步向下传递;
    • 作用:对上一步异步任务进行现场恢复;
  5. 异步任务交互—applyToEither
    • 功能:把2个异步任务做比较,异步任务先到结果的,就对先到的结果进行下一步的操作。 先到先用
  6. acceptEither
    • 功能:把料你刚刚异步任务作比较,异步任务先到的结果 的,就对先到的结果进行下一步操作(消费使用);
  7. runAfterEither
  • 功能:若不关系最先到达的结果,指向在有一个异步任务完成时得到完成的同志,可使用runAfterrEither()
  1. get 与join的区别
  • get抛出检查异常,需要程序必须处理,而join抛出运行时异常,程序可不处理。所以join更适合用在流式编程中。

P26 并行流

  1. 并行流的局限性
    • 只能使用默认的线程池,不能灵活配置线程池;
  2. 使用CompletableFuture进一步增强并行性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值