转自: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