CompletableFuture为什么出现
Future的get() 方法在计算完成之前会一直处在阻塞状态下,isDone() 方法容易耗费cpu资源,对于真正的异步处理,我们希望可以传入回调函数,在furue结束的时候自动调用改回调函数,这样我们就不用等待结果。
阻塞的方式和异步编程的设计理念是违背,而轮询的方式会耗费无谓的cpu资源 。因此JDK8设计出CompletableFuture。CompletableFuture提供了一种观察者模式类似的机制,可以让任务执行完成后通知监听的一方。
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接口