guava库学习:学习concurrencysettablefuture(代码片段)

wangcp-2014 wangcp-2014     2022-12-11     547

关键词:

转自:https://my.oschina.net/realfighter/blog/349931

链接地址:http://www.xx566.com/detail/160.html

    上一篇,Guava库学习:学习Concurrency(四)FutureCallback中,FutureCallback 接口提供了onSuccess 和onFailure 方法,用于接收任务执行的结果,通过FutureCallback我们可以方便的在任务执行成功或失败后进行其他的处理,但有些时候我们想主动的设置任务 的返回值,Guava为我们提供了SettableFuture类,本篇,我们就来学习Concurrency(五)SettableFuture。

    翻开SettableFuture的源码,我们看到SettableFuture继承了AbstractFuture抽象 类,AbstractFuture抽象类实现了ListenableFuture接口,所以SettableFuture类也是 ListenableFuture接口的一种实现,源码相当的简单,其中只包含了三个方法,一个用于创建SettableFuture实例的静态 create()方法;set方法用于设置Future的值,返回是否设置成功,如果Future的值已经被设置或任务被取消,会返回 false;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的返回值,我们也不需要再去执行异步任 务获取返回值,下一篇,Guava库学习:学习Concurrency(六)AsyncFunction,我们将会学习到SettableFuture的 具体使用,敬请期待。

 

    代码地址:http://git.oschina.net/realfighter/xx566-diary/blob/master/src/guava/SettableFutureTest.java



guava学习--hashing

128位的MurmurHash(烽火使用过):看一下Java标准库中的非加密哈希算法你会发现少了MurmurHash,这是一个简单高效且还是分布式的算法,在许多语言中都有着很好的支持。我们并不是说要用它来取代Java的hashCode方法,不过如果你想要... 查看详情

guava学习笔记概览

...对Guava没有一个系统的了解,为了更好的应用,准备好好学习一下这个优秀的开源工具包。Guava主页:https://github.com/google/guava,以下内容来自Guava—Wiki>>关 查看详情

java基础学习总结(192)——谷歌guava的常用工具集总结(代码片段)

前言Guava是一组来自谷歌的核心Java库,包括新的集合类型(如multimap和multiset)、不可变集合、图形库,以及用于并发、I/O、哈希、缓存、原语、字符串等的实用工具!它在谷歌内部的大多数Java项目中被广泛使用,也被许多其他公司... 查看详情

guava学习--事件驱动模型

转载:http://www.cnblogs.com/whitewolf/p/4132840.html     http://www.cnblogs.com/peida/p/EventBus.html 更好的文章:https://my.oschina.net/realfighter/blog/406342 Guava在guava-libraries中 查看详情

guava学习

一、Stringspackagecom.google.common.base;Srings类程序中经常使用。比如判断字符串是否为空,我们在之前用jdk方法判断是会用下面这个判断语句。if(input==null||input.equals("")){System.out.println("输入字符串为空");} 上面的代码如果不注意的... 查看详情

guava学习--asyncfunction

 AsyncFuntion接口与之前学习吃的使用Function和Functions进行对象转换有很密切的联系,AsyncFuction和Function都需要接收一个input参数,不同的是AsyncFunction接口返回的是ListenableFuture,当我们需要接收AsyncFunction转换后的结果时,我们需... 查看详情

guava学习--functionpredicate

Function用于同步转换。Predicate用于过滤。 importjava.util.Collection;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importcom.google.common.base.Function;importcom.google.common.base.Funct 查看详情

guava学习--settablefuture

转载:https://my.oschina.net/realfighter/blog/349931翻开SettableFuture的源码,我们看到SettableFuture继承了AbstractFuture抽象类,AbstractFuture抽象类实现了ListenableFuture接口,所以SettableFuture类也是ListenableFuture接口的一种实现,源码相当的简单,... 查看详情

guava学习:guava集合工具-table接口(代码片段)

最近学习了下guava的使用,这里简单记录下一些常用并且使用的工具类把。看到table的使用时候真的是眼前一亮,之前的代码中写过很多的Map<String,Map<String,String>>这种格式的代码,这种阅读起来非常的不友好,甚至都不... 查看详情

guava源码学习ordering

基于版本:Guava22.0Wiki:Ordering 0.Ordering简介Guava的Ordering提供了链式风格的比较器的实现,我们可以用Ordering轻松构建复杂的比较器。 1.类图这张类图不完全,实际上Ordering有十几个子类,这些子类共同提供了复杂的功能。&... 查看详情

guava学习--集合2

Table:当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName,Map<LastName,Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row... 查看详情

guava学习--集合1

Lists:其内部使用了静态工厂方法代替构造器,提供了许多用于List子类构造和操作的静态方法,我们简单的依次进行说明,如下:newArrayList():构造一个可变的、空的ArrayList实例。newArrayList(E...elements):构造一个可变的包含传入元... 查看详情

guava源码学习eventbus

基于版本:Guava22.0Wiki:EventBus 0.EventBus简介提供了发布-订阅模型,可以方便的在EventBus上注册订阅者,发布者可以简单的将事件传递给EventBus,EventBus会自动将事件传递给相关联的订阅者。支持同步/异步模式。只能用于线程间... 查看详情

关于guava集合的一些学习笔记

publicclassSetGuava{ publicstaticvoidmain(String[]args){ /** *GuavaAPI提供了有用的新的集合类型,协同已经存在的java集合工作的很好。分别是Multimap,Multiset, *Table,BiMap,ClassToInstanceMap// */// System.out.println("Multimap:一种k 查看详情

guava学习--file

使用Files类来执行那些基本的任务,比如:移动或复制文件,或读取文件内容到一个字符串集合Closer类,提供了一种非常干净的方式,确保Closeable实例被正确的关闭ByteSource和CharSource类,提供了不可变的输入流(Input)和读(Reader... 查看详情

guava学习--objects

转载:https://my.oschina.net/realfighter/blog/349821  Java中的Object类是所有Java类的超类(也就是祖先),所有对象都实现Object类中的方法,在日常的工作中,我们经常需要重写其中的几个方法,如:equals、toString、hashCode等方法,... 查看详情

guava学习笔记:optional优雅的使用null

在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上的优雅和简单。   null代表不确定的对象:  Jav... 查看详情

guava学习--suppliersuppliers

转载:http://www.cnblogs.com/jun-ma/p/4850591.html GuavaSuppliers的主要功能是创建包裹的单例对象,通过get方法可以获取对象的值。每次获取的对象都为同一个对象,但你和单例模式有所区别,Suppliers具备更加迷人的色彩。 Lazy初始... 查看详情