guava中的ListenableFuture
来源:互联网 发布:淘宝卖家不开发票 编辑:程序博客网 时间:2024/05/17 04:42
- SettableFuture:不需要实现一个方法来计算返回值,而只需要返回一个固定值来做为返回值,可以通过程序设置此Future的返回值或者异常信息
- CheckedFuture: 这是一个继承自ListenableFuture接口,他提供了checkedGet()方法,此方法在Future执行发生异常时,可以抛出指定类型的异常。
SettableFuture
AbstractFuture抽象类实现了ListenableFuture接口,所以SettableFuture类也是ListenableFuture接口的一种实现,源码相当的简单,其中只包含了三个方法:
1、一个用于创建SettableFuture实例的静态create()方法;
2、set方法用于设置Future的值,返回是否设置成功,如果Future的值已经被设置或任务被取消,会返回false;
3、setException与set方法类似,用于设置Future返回特定的异常信息,返回exception是否设置成功。
SettableFuture类是ListenableFuture接口的一种实现,我们可以通过SettableFuture设置Future的返回 值,或者设置Future返回特定的异常信息,可以通过SettableFuture内部提供的静态方法create()创建一个 SettableFuture实例,下面是一个简单的例子:
SettableFuture sf = SettableFuture.create();//设置成功后返回指定的信息sf.set("SUCCESS");//设置失败后返回特定的异常信息sf.setException(new RuntimeException("Fails"));
通过上面的例子,我们看到,通过create()方法,我们可以创建一个默认的ettableFuture实例,当我们需要为Future实例设置一个返 回值时,我们可以通过set方法,设置的值就是Future实例在执行成功后将要返回的值;另外,当我们想要设置一个异常导致Future执行失败,我们 可以通过调用setException方法,我们将给Future实例设置指定的异常返回。当我们有一个方法返回Future实例时,SettableFuture会显得更有价值,但是已经有了Future的返回值,我们也不需要再去执行异步任 务获取返回值。
AsyncFunction
接口返回的是 ListenableFuture,当我们需要接收AsyncFunction转换后的结果时,我们需要调用 ListenableFuture.get()方法。
AsyncFunction接口常被用于当我们想要异步的执行转换而不造成线程阻塞时,尽管Future.get()方法会在任务没有完成时造成阻塞,但 是AsyncFunction接口并不被建议用来异步的执行转换,它常被用于返回Future实例,我们来看下面的代码示例:
class AsyncFunctionSample implements AsyncFunction<Long, String> { private ConcurrentMap<Long, String> map = Maps.newConcurrentMap(); private ListeningExecutorService listeningExecutorService; //这里简单的模拟一个service private Map<Long,String> service = new HashMap<Long, String>(){ { put(1L,"retrieved"); } }; @Override public ListenableFuture<String> apply(final Long input) throws Exception { if (map.containsKey(input)) { SettableFuture<String> listenableFuture = SettableFuture. create(); listenableFuture.set(map.get(input)); return listenableFuture; } else { return listeningExecutorService.submit(new Callable<String>() { @Override public String call() throws Exception { //service中通过input获取retrieved String retrieved = service.get(input); map.putIfAbsent(input, retrieved); return retrieved; } }); } }}
上面的例子是对AsyncFunction接口的一个简单实现,内部包含了ConcurrentHashMap的实例,当我们调用apply方法的时候, 我们会首先在我们的map中查询value值,传入的input对象充当了一个关键的key,如果我们在map中找到了相应的value值,我们使用 SettableFuture对象创建了一个Future对象,并且设置返回值等于从map中获取到的value值;否则的话,我们通过向 ExecutorService提交Callable返回Future对象,同样的,在相应的map中,为相应的key设置获取到的value值。
- Guava 中的 ListenableFuture
- guava中的ListenableFuture
- guava ListenableFuture
- guava ListenableFuture
- Guava包中的ListenableFuture详情解析
- ListenableFuture in Guava
- guava ListenableFuture使用
- ListenableFuture in Guava
- Google Guava ListenableFuture入门
- Guava ListenableFuture 小试牛刀
- ListenableFuture in Guava
- ListenableFuture in Guava
- guava的ListenableFuture使用
- 多线程Future之Guava ListenableFuture
- Guava中并发ListenableFuture使用
- Guava并发:ListenableFuture使用介绍以及示例
- Guava之ListenableFuture(实现Java异步)
- Guava之ListenableFuture(链式回调)
- Untiy中用C#实现TCP通讯(Socket通讯)服务端与客户端皆可
- 接口测试基础
- gitHub存放页面
- 方法和函数区别
- Java多线程/并发03、实现定时任务的3种方法
- guava中的ListenableFuture
- tomcat不解压war包问题
- react中context学习
- DUBBO研究与学习三:Dubbo+zookeeper安装
- 理解 Python 中的 *args 和 **kwargs
- Android NDK开发之从环境搭建到Demo级十步流
- 什么是广播
- Hbase -0.98伪分布式安装与配置
- Struts2接受的参数乱码