`
flamezealot
  • 浏览: 20753 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java CompletionStage CompletableFuture

 
阅读更多

java.util.concurrent.CompletionStage

 

 * <li>The computation performed by a stage may be expressed as a

 * Function, Consumer, or Runnable (using methods with names including

 * <em>apply</em>, <em>accept</em>, or <em>run</em>, respectively)

 * depending on whether it requires arguments and/or produces results.

 * For example, {@code stage.thenApply(x -> square(x)).thenAccept(x ->

 * System.out.print(x)).thenRun(() -> System.out.println())}. An

 * additional form (<em>compose</em>) applies functions of stages

 * themselves, rather than their results. </li>

 

方法分为几类:

一、单stage场景下的

apply,使用上个stage的result作为入参,产出新的result

accept,消费上个stage产出的result

run,既不消费也不产出

 

二、多个stage场景下的方法,以下关键字分别跟上名几个方法类别组合

both,两个stage都完成

  1、combine方法,把两个stage的产出合并成一个产出

  2、AcceptBoth,消费两个stage的产出

  3、runAfterBoth

either,任意一个stage完成,但是下一个stage消费的不能确定是哪个stage产出的

  1、applyToEither

  2、acceptEither

  3、runAfterEither

 

以上每个方法又分为三种

1、同步的

2、异步(带async),使用默认线程池

3、异步(入参有executor),使用指定线程池

 

三、异常处理

exceptionally 前个stage有exception时,返回自定义result,如果没有exception,则输出前个stage的result

whenComplete,前一个stage的exception和result作为入参,返回一个新的stage,这个stage跟前一个stage拥有一样的result和exception

handle,前一个stage的exception和result作为入参,返回一个新的stage,这个stage的result是函数生成的result

 

 

 

 java.util.concurrent.CompletableFuture

anyOf 任意一个stage完成,创建的新stage就完成

allOf  所有stage完成,创建的新stage才完成

如果anyOf、allOf列表里的stage是异步执行的,它们会在默认的线程池里运行,而程序会继续运行,有可能在所有stage都完成之前程序就退出了,导致stage并没有全部完成,需要所有stage都完成的话,需要使用join或者get等待

 

 

 

分享到:
评论

相关推荐

    javafuture源码-demo-java-completablefuture:“带有CompletableFuture的Java异步编程”

    java future源码Java中具有CompletableFuture的异步编程 介绍 CompletableFuture ...CompletionStage接口及其基本实现CompletableFuture类。 这些类允许构建有效且流畅的多级异步计算。 但是,CompletableFutur

    20个实例玩转 Java 8 异步神器 CompletableFuture.pdf

    Java 8 引入的 CompletableFuture 是一种强大的工具,用于处理异步编程和构建复杂的异步计算流程。它实现了 CompletionStage 接口,这个接口定义了一种计算阶段,该阶段可以同步或异步地完成,并且可以与其他阶段...

    Java组合式异步编程CompletableFuture.pdf

    `CompletableFuture`是Java 8中新增的功能之一,它继承自`Future`并实现了`CompletionStage`接口。这使得它可以灵活地处理异步操作和任务间的依赖关系。 ##### 2.1 Future与CompletionStage - **Future**:表示一个...

    CompletableFuture

    CompletableFuture 是 Java 中的一个异步编程模型,旨在解决 Future 接口的局限性。CompletableFuture 完全继承了 Future 接口,并在此基础上进行了丰富的扩展,完美地弥补了 Future 上述的种种问题。 一、Future ...

    j8stages:使用Java 8 CompletionStage API进行实验

    使用Java 8 CompletionStage API进行实验 为什么 尝试使用Java 8的 API导致我提出了许多有关其设计的问题,我发现我可以通过尝试自己的实现来最好地回答。 这就是那个实现。 在实际的应用程序中使用的不是现成的...

    CompletableFuture 异步处理

    通过实现CompletionStage接口,CompletableFuture可以将多个异步任务连接在一起,形成一个任务流水线。 CompletableFutur的四种方法: 1. `supplyAsync(Supplier&lt;U&gt; supplier)`: 这个方法接受一个Supplier,用于...

    tascalate-concurrent:阻塞(IO绑定)的实现可取消java.util.concurrent.CompletionStage和java.util.concurrent.ExecutorService-s的相关扩展

    此功能增强了唯一的Java 8内置实现 ,该实现主要支持计算任务。 此外,该库还可以帮助解决许多异步编程难题,例如处理超时,重试/轮询功能,协调多个并发计算的结果等。 从版本该库以多发行版JAR的形式提供,并且...

    Asynchronous_programming_in_Java8.pdf

    CompletableFuture类实现了CompletionStage和Future接口。future但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背。 为了解决这个问题,JDK吸收了guava的设计思想,加入了Future...

    细流:一个用于编写异步代码的小型库

    在内部,我们已改为使用CompletionStage / CompletableFuture。我什么时候应该使用它? 当您将两个以上的异步调用组合在一起时,您会认为代码难以阅读。 当您想将并发管理方面(当代码执行某项操作)与业务逻辑(它...

    microprofile-context-propagation

    该提案引入了用于获取由托管线程(由容器管理的线程)支持的CompletableFuture的API,并具有从创建CompletableFuture的线程中捕获上下文并在运行CompletionStage操作时对其进行应用的能力。 文献资料 有关最新...

Global site tag (gtag.js) - Google Analytics