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等待
相关推荐
java future源码Java中具有CompletableFuture的异步编程 介绍 CompletableFuture ...CompletionStage接口及其基本实现CompletableFuture类。 这些类允许构建有效且流畅的多级异步计算。 但是,CompletableFutur
Java 8 引入的 CompletableFuture 是一种强大的工具,用于处理异步编程和构建复杂的异步计算流程。它实现了 CompletionStage 接口,这个接口定义了一种计算阶段,该阶段可以同步或异步地完成,并且可以与其他阶段...
`CompletableFuture`是Java 8中新增的功能之一,它继承自`Future`并实现了`CompletionStage`接口。这使得它可以灵活地处理异步操作和任务间的依赖关系。 ##### 2.1 Future与CompletionStage - **Future**:表示一个...
CompletableFuture 是 Java 中的一个异步编程模型,旨在解决 Future 接口的局限性。CompletableFuture 完全继承了 Future 接口,并在此基础上进行了丰富的扩展,完美地弥补了 Future 上述的种种问题。 一、Future ...
使用Java 8 CompletionStage API进行实验 为什么 尝试使用Java 8的 API导致我提出了许多有关其设计的问题,我发现我可以通过尝试自己的实现来最好地回答。 这就是那个实现。 在实际的应用程序中使用的不是现成的...
通过实现CompletionStage接口,CompletableFuture可以将多个异步任务连接在一起,形成一个任务流水线。 CompletableFutur的四种方法: 1. `supplyAsync(Supplier<U> supplier)`: 这个方法接受一个Supplier,用于...
此功能增强了唯一的Java 8内置实现 ,该实现主要支持计算任务。 此外,该库还可以帮助解决许多异步编程难题,例如处理超时,重试/轮询功能,协调多个并发计算的结果等。 从版本该库以多发行版JAR的形式提供,并且...
CompletableFuture类实现了CompletionStage和Future接口。future但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背。 为了解决这个问题,JDK吸收了guava的设计思想,加入了Future...
在内部,我们已改为使用CompletionStage / CompletableFuture。我什么时候应该使用它? 当您将两个以上的异步调用组合在一起时,您会认为代码难以阅读。 当您想将并发管理方面(当代码执行某项操作)与业务逻辑(它...
该提案引入了用于获取由托管线程(由容器管理的线程)支持的CompletableFuture的API,并具有从创建CompletableFuture的线程中捕获上下文并在运行CompletionStage操作时对其进行应用的能力。 文献资料 有关最新...