• 【并发编程】异步任务编排


    一。创建异步对象

      CompletableFuture 提供了四个静态方法来创建一个异步操作。

       runXxxx 都是没有返回结果的,supplyXxx 都是可以获取返回结果的。

      可以传入自定义的线程池,否则就用默认的线程池。

    二。计算完成时回调方法

      whenComplete 可以处理正常和异常的计算结果,exceptionally 处理异常情况。

      whenComplete 和 whenCompleteAsync 的区别:

         whenComplete:是执行当前任务的线程执行继续执行 whenComplete 的任务。

        whenCompleteAsync:是执行把 whenCompleteAsync 这个任务继续提交给线程池来进行执行。

       方法不以 Async 结尾,意味着 Action 使用相同的线程执行,而 Async 可能会使用其他线程执行(如果是使用相同的线程池,也可能会被同一个线程选中执行)。

    三。handle 方法

      和 complete 一样,可对结果做最后的处理(可处理异常),可改变返回值。

     四。线程串行化方法

      thenApply 方法:当一个线程依赖另一个线程时,获取上一个任务返回的结果,并返回当前任务的返回值。

      thenAccept 方法:消费处理结果。接收任务的处理结果,并消费处理,无返回结果。

      thenRun 方法:只要上面的任务执行完成,就开始执行 thenRun,只是处理完任务后,执行thenRun 的后续操作

      带有 Async 默认是异步执行的。同之前。

      以上都要前置任务成功完成。

      Function<? super,?extends U>

        T:上一个任务返回结果的类型

        U:当前任务的返回值类型

    五。两任务组合 - 都要完成

       两个任务必须都完成,触发该任务。

      thenCombine:组合两个 future,获取两个 future 的返回结果,并返回当前任务的返回值

      thenAcceptBoth:组合两个 future,获取两个 future 任务的返回结果,然后处理任务,没有返回值。

      runAfterBoth:组合两个 future,不需要获取 future 的结果,只需两个future 处理完任务后,处理该任务。

    六。两任务组合 - 一个完成

       当两个任务中,任意一个 future 任务完成的时候,执行任务。

      applyToEither:两个任务有一个执行完成,获取它的返回值,处理任务并有新的返回值。

      acceptEither:两个任务有一个执行完成,获取它的返回值,处理任务,没有新的返回值。

      runAfterEither:两个任务有一个执行完成,不需要获取 future 的结果,处理任务,也没有返回值。

    七。多任务组合

       allOf:等待所有任务完成

      anyOf:只要有一个任务完成

  • 相关阅读:
    新零售解决方案体系架构
    设计模式-分类
    设计模式-设计原则
    一天一个 Linux 命令(12):tree 命令
    RabbitMQ中如何保证消息的可靠传输?如果消息丢了怎么办
    为什么使用MQ?
    一天一个 Linux 命令(11):cp命令
    数据结构和算法-线性查找-二分查找
    作图工具汇总
    Git 命令大全,Git命令汇总,Git命令说明
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/16275382.html
Copyright © 2020-2023  润新知