CompletableFuture

简介: CompletableFuture

CompletableFuture为什么出现

Future的get() 方法在计算完成之前会一直处在阻塞状态下,isDone() 方法容易耗费cpu资源,对于真正的异步处理,我们希望可以传入回调函数,在furue结束的时候自动调用改回调函数,这样我们就不用等待结果。

阻塞的方式和异步编程的设计理念是违背,而轮询的方式会耗费无谓的cpu资源 。因此JDK8设计出CompletableFuture。CompletableFuture提供了一种观察者模式类似的机制,可以让任务执行完成后通知监听的一方。

image.png

image.png

image.png

CompletionStage

  • CompletionStage代表异步计算过程中的某一个阶段,一个阶段完成后可能会触发另外一个阶段
  • 一个阶段的计算执行可以是一个Fuction,Consumer或者Runnable。比如:

stage.thenApply(x->square(x)).thenAccept(x->System.out.print(x)).thenRun(()->System.out.print())

  • 一个阶段的执行可能是被单个阶段完成后触发,也可能是由多个阶段一起触发。

代表异步计算过程中的某一个阶段,一个阶段完成后可能触发另外一个阶段,有点类似Linux系统的管道 分隔符参数。

CompletableFuture

  • 在java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合CompletableFuture的方法。
  • 它可能代表一个明确完成的Future,也有可能代表一个完成阶段(CompletionStage),它支持计算完成以后触发一些函数或者执行某些动作。
  • 它实现了Future和CompletionStage接口


目录
相关文章
|
3月前
CompletableFuture
CompletableFuture
17 0
|
4月前
|
Java 数据处理 数据库
CompletableFuture 使用
CompletableFuture 使用
28 0
|
5月前
|
消息中间件 Java 中间件
Future and CompletableFuture
Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里, 我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存了执行的结果 ,可通过Future的get()方法取出结果,如果线程池使用的是execute(),则传入的是Runnable接口 无返回值。
34 0
|
5月前
|
Java 调度
并发编程——Future & CompletableFuture
Java创建线程的方式,一般常用的是Thread,Runnable。如果需要当前处理的任务有返回结果的话,需要使用Callable。Callable运行需要配合Future。
23 0
|
6月前
JUC--CompletableFuture下
简单介绍CompletableFuture
|
6月前
|
Java Linux
JUC--CompletableFuture上
Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果,取消任务带带执行,判断任务是否被取消,判断任务执行是否完毕等。
|
6月前
|
Java
CompletableFuture总结和实践
CompletableFuture被设计在Java中进行异步编程。异步编程意味着在主线程之外创建一个独立的线程,与主线程分隔开,并在上面运行一个非阻塞的任务,然后通知主线程进展,成功或者失败。
171 0
Zp
|
11月前
【CompletableFuture】CompletableFuture中join()和get()方法的区别
【CompletableFuture】CompletableFuture中join()和get()方法的区别
Zp
464 0
|
Java 测试技术
CompletableFuture使用详解
CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口
200 0
CompletableFuture使用详解
|
Java 测试技术 Linux
CompletableFuture调用OpenFegin,谁用谁傻
当调用FeignBlockdingloadBalancerClient使用并行流(多线程)会有问题。
225 0
CompletableFuture调用OpenFegin,谁用谁傻