Java8笔记5

本文介绍了Java8中的CompletableFuture,探讨了并发与并行的区别,并详细讲解了Future接口及其在异步计算中的作用。通过实例展示了如何使用CompletableFuture的sync和async方法进行异步操作,包括thenApply、thenAccept、thenRun以及它们的异步版本。还提到了thenCompose方法用于处理多层结构的future,以及thenCombine和thenAcceptBoth用于合并两个future的情况。最后讨论了allOf和anyOf的使用场景。
摘要由CSDN通过智能技术生成

                                    CompletableFuture: 组合式异步编程

1.先了解下什么是吞吐量:

吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特字节、分组等测量)。(百科)

2.并发,并行:

并发:单个处理器核在多个任务之间切换处理

并行:多个处理器核同时处理多个任务

Future 接口

Future接口建模了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个运用hui被返回调用方。

(简单说就是你去奶茶店排队买奶茶,店员给你一个序号,你就不用在那里等待,可以去做其他事,等好了再去拿,这就是异步)

例子:

ExecutorService executor = Executors.newCachedThreadPool(); 
Future<Double> future = executor.submit(new Callable<Double>() { 
 public Double call() {
 return doSomeLongComputation(); 
 }}); 
doSomethingElse();
try { 
 Double result = future.get(2, TimeUnit.SECONDS); 
} catch (Exception e) {
 // 计算抛出一个异常
}
        这种编程方式让你的线程可以在 ExecutorService 以并发方式调 用另一个线程执行耗时操作的同时,去执行一些其他的任务。接着,如果你已经运行到没有异步 操作的结果就无法继续任何有意义的工作时,可以调用它的get 方法去获取操作的结果。如果操 作已经完成,该方法会立刻返回操作的结果,否则它会阻塞你的线程,直到操作完成,返回相应 的结果。
       Feature 使用重 载版本的get 方法,它接受一个超时的参数,通过它,你可以定义你的线程等待 Future 结果的最 长时间,而不是一直等待下去

 使用 CompletableFuture 构建异步应用

       我们知道 Future 接口提供了方法来检测异步计算是否已经结束(使用 isDone方法),等待异步操作结束,以及获取计算的结果。但是这些特性还不足以让你编写简洁 的并发代码。比如,我们很难表述Future 结果之间的依赖性;从文字描述上这很简单,“当长时 间计算任务完成时,请将该计算的结果通知到另一个长时间运行的计算任务,这两个计算任务都 完成后,将计算的结果与另一个查询操作结果合并”。但是,使用Future 中提供的方法完成这样 的操作又是另外一回事。这也是我们需要更具描述能力的特性的原因,比如下面这些。
         将两个异步计算合并为一个 —— 这两个异步计算之间相互独立,同时第二个又依赖于第 一个的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值