ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Guava库学习:学习Concurrency(五)SettableFuture【转】

2020-11-03 11:35:50  阅读:423  来源: 互联网

标签:返回 Concurrency 实例 Future 设置 SettableFuture Guava 我们


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

标签:返回,Concurrency,实例,Future,设置,SettableFuture,Guava,我们
来源: https://www.cnblogs.com/wangcp-2014/p/13919373.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有