前言:
本章介绍goole Guava 包的 ListenableFuture,也就是开源的Java Library Guaa中的一个并发编程的辅助类,它笨神是继承是java的Future。并发是一个很难的问题,但它是由具有强大和简单的抽象工作显著简化。为了简化事情,Guava扩展了来自JDK的Future从而得到 ListenableFuture。并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义le ListenableFuture
。
我们强烈地建议你在代码中多使用ListenableFuture来代替JDK的 Future, 因为:
- *大多数Futures 方法中需要它。
- *转到ListenableFuture 编程比较容易。
- *Guava提供的通用公共类封装了公共的操作方方法,不需要提供Future和ListenableFuture的扩展方法。
接口:
传统JDK中的Future通过异步的方式计算返回结果:在多线程运算中可能或者可能在没有结束返回结果,Future是运行中的
线程的
一个引用
句柄,确保在服务执行返回一个Result。
ListenableFuture可以允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 或者在运算(多线程执行)
完成后
立即执行。这样简单的改进,使得可以明显的支持更多的操作,这样的功能在JDK concurrent包中的Future是不支持的。
ListenableFuture 中的基础方法是addListener(Runnable, Executor)
该方法会在多线程运算完的时候,指定的Runnable参数传入的对象会被指定的Executor执行。
添加回调(Callbacks):
大多数用户喜欢使用Futures.addCallback(ListenableFuture<V>, FutureCallback<V>, Executor)
,或默认使用的版本MoreExecutors.sameThreadExecutor()
,以便在回调快速轻便时使用。A FutureCallback<V>
实现两种方法: