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接口


目录
相关文章
|
1月前
|
Java API
java多线程之FutureTask、Future、CompletableFuture
java多线程之FutureTask、Future、CompletableFuture
|
6月前
CompletableFuture
CompletableFuture
24 0
|
7月前
|
Java 数据处理 数据库
CompletableFuture 使用
CompletableFuture 使用
35 0
|
8月前
|
消息中间件 Java 中间件
Future and CompletableFuture
Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里, 我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存了执行的结果 ,可通过Future的get()方法取出结果,如果线程池使用的是execute(),则传入的是Runnable接口 无返回值。
37 0
|
8月前
|
Java 调度
并发编程——Future & CompletableFuture
Java创建线程的方式,一般常用的是Thread,Runnable。如果需要当前处理的任务有返回结果的话,需要使用Callable。Callable运行需要配合Future。
25 0
|
9月前
|
Java
CompletableFuture总结和实践
CompletableFuture被设计在Java中进行异步编程。异步编程意味着在主线程之外创建一个独立的线程,与主线程分隔开,并在上面运行一个非阻塞的任务,然后通知主线程进展,成功或者失败。
243 0
Zp
【CompletableFuture】CompletableFuture中join()和get()方法的区别
【CompletableFuture】CompletableFuture中join()和get()方法的区别
Zp
515 0
|
Java 测试技术
CompletableFuture使用详解
CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口
226 0
CompletableFuture使用详解
|
Java 测试技术 Linux
CompletableFuture调用OpenFegin,谁用谁傻
当调用FeignBlockdingloadBalancerClient使用并行流(多线程)会有问题。
259 0
CompletableFuture调用OpenFegin,谁用谁傻
|
消息中间件 Dubbo Kafka
CompletableFuture学习
前面我们已经知道CompletionService是可以解决Future带来的阻塞问题的,同时我们除了前面我们看到的take方法之外,还可以使用poll方法,这样可以使你的程序免受阻塞之苦。因为poll方法也是无阻塞性的。同时在kafka的源码中,我们如果使用消费者的话,可以看到会使用一个基于future的poll方法。同时我们可以在dubbo的新版本2.7中,可以看到其异步编程采用的就是我们要介绍的CompletableFuture。因此,我们有必要了解CompletableFuture,同时其也是真正意义上的异步编程的实现。
114 0
CompletableFuture学习