zoukankan      html  css  js  c++  java
  • 五、异步任务编排CompletableFuture

    一、简介

    并发编程中我们经常创建异步线程来执行任务。但是,当异步任务之间存在依赖关系时,使得我们开发过程变得更加复杂。比如:

    1、线程2依赖于线程1的执行结果

    2、线程3依赖于线程1和线程2执行结果的合并

    要实现以上两个异步线程的依赖,我们可能会采用等待/通知、消费队列或者一些比较麻烦的逻辑来控制异步任务的的关系。这期间,你可能不得不考虑中间结果,以及并发临界点等问题。

    总而言之,对于复杂的异步任务的控制不是一个容易的事情。

    CompletableFuture 

    completableFuture是JDK于1.8+提供的一个实现类,它主要用于异步任务的编排,很好地帮我们解决异步任务控制逻辑。

    它实现了Future接口和CompletableStage接口,所以你可以像使用Future一样简单地使用CompletableFuture。

    JDK文档:https://blog.fondme.cn/apidoc/jdk-1.8-google/java/util/concurrent/CompletableFuture.html

    二、使用示例

    线程2依赖于线程1的执行结果

    // 线程1执行结果
    CompletableFuture.supplyAsync(() -> "hello ")
                     // 消费线程1执行结果
                     .thenAccept(x -> System.out.println(x + "world"));

    输出结果:

    hello world

    线程3依赖于线程1和线程2执行结果的合并

    // 线程1执行结果
    CompletableFuture.supplyAsync(() -> "hello ")
                     // 结合线程2执行结果
                     .thenCombineAsync(CompletableFuture.supplyAsync(() -> "world"), (x, y) -> x + y)
                     // 消费线程1和2的合并结果
                     .thenAccept(x -> System.out.println(x));

    输出结果:

    hello world

    异步任务的编排,实际上是对同步和异步的交点进行了控制,Completable把这个控制逻辑从业务任务代码中抽离了出来。这样你可以更加专注于编写异步任务中的代码。

  • 相关阅读:
    2020.11.5收获
    代码大全2阅读笔记11~1
    2020.11.4收获
    2020.11.3收获
    2020.11.2收获
    Java学习10.21(javaweb对输入信息进行验证1)
    Java学习10.20(使用 form 元素)
    Java学习10.18——Javaweb常用表单元素
    Java学习10.17(新课程添加)
    Java学习10.11
  • 原文地址:https://www.cnblogs.com/lay2017/p/10186386.html
Copyright © 2011-2022 走看看