Java 8 实战部分

第11章 组合式异步编程

解决并发执行的良药。看说明书,吃药,痊愈

看说明书(课前预习):
1、搞清楚并发与并行的区别

并发与并行的区别

2、异步调用与非阻塞式操作的概念

异步调用:其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。
非阻塞是操作 :即从不同角度解读异步调用而已。

吃药(正文)

1、Future
设计初衷是对将来某个时刻会发生的结果进行建模,它建模
了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。

java5 提供了异步计算的Future接口,代表了一个异步计算(即调用线程可以继续运行,不会因为调用方法而阻塞),但是描述异步计算的能力有局限性,表达能力不强
2、CompletableFuture
java8 对Future进行了增强,使得程序描述和表达异步计算的能力更强。结合java8 Lambda表达式和流水线的思想,给了程序更强大的描述能力,提供了更多的方法。
3、错误处理
CompletableFuture的completeExceptionally方法将导致CompletableFuture内发生问
题的异常抛出。
在这里插入图片描述
4、使用工厂方法创建CompletableFuture
java8 提供了工厂方法的不同重载方法创建异步计算,用来简化代码
在这里插入图片描述
并行流还是Completabel ?
并行流paralellStream和Completable都可以进行并行计算,当两者都是使用通用线程池,默认都是用固定数目的线程具体线程数qu取决于Runtime.getRuntime.availableProcessors()的返回值。然而
Completable具有一定的优势,它允许对执行器(Executor)进行配置,尤其是线程池大小,让它以更适合应用需求的方式进行配置,这是并行流API无法提供的。
如何选择
在这里插入图片描述
创建执行器Executor
穿件执行器
【思考】我们每个Future中进行的都是单次的操作,如何将多个异步操作结合在一起,以流水线的方式运行。
5、对多个异步任务进行流水线操作

  1. thenCompose() 第一个输入作为第二个输入的合并
  2. thenCombine() 两个完全不相干时的异步计算将结果进行合并,它接收名为BiFunction的第二个参数,这个参数定义了当两个CompletableFuture对象完成计算后,如何合并结果。

合并异步计算结果
【如何不必等待所有数据计算完成就向用户展示数据】
3. 相应CompletableFuture 的completion事件
thenAccept()
在每个CompletableFuture 上注册一个操作,该操作会在CompletableFuture 完成执行后使用它的返回值,它接受CompletableFuture 执行完毕后的返回值做参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值