guava 并发

在上一篇文章中,我介绍了使用Guava库中com.google.common.util.concurrent包中的Monitor类的方法。 在这篇文章中,我将继续介绍Guava并发实用程序,并讨论ListenableFuture接口。 ListenableFuture通过添加接受完成侦听器的方法,从java.util.concurrent包扩展了Future接口。

可听的未来

ListenableFuture行为与java.util.concurrent.Future完全相同,但是具有方法addCallback(Runnable, ExecutorService)在给定的executor中执行回调。 这是一个例子:

ListenableFuture futureTask = executorService.submit(callableTask)futureTask.addListener(new Runnable() {@Overridepublic void run() {..work after futureTask completed}}, executorService);

如果在添加回调时提交的任务已完成,它将立即运行。 使用addCallback方法有一个缺点,即Runnable无法访问future产生的结果。 要访问Future的结果,您将需要使用FutureCallback

FutureCallback

FutureCallback接受从Future产生的结果,并指定onSuccessonFailure方法。 这是一个例子:

class FutureCallbackImpl implements FutureCallback<String> {@Overridepublic void onSuccess(String result){.. work with result}@Overridepublic void onFailure(Throwable t) {... handle exception}}

通过使用Futures类中的addCallback方法来附加FutureCallback

Futures.addCallback(futureTask, futureCallbackImpl);

此时,您可能会问,当ExecutorService仅返回Futures时,如何获取ListenableFuture实例? 答案是使用ListenableExecutionService

ListenableExecutionService

要使用ListenableExecutionService只需使用对MoreExecutors.listeningDecorator(ExecutorService)的调用来装饰ExecutorService实例,例如:

ExecutorsService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());

结论

借助添加回调(无论是Runnable还是处理成功和失败条件的FutureCallback功能, ListenableFuture可能是对您的武器库的宝贵补充。 我创建了一个单元测试使用证明ListenableFuture可以作为一个依据 。 在我的下一个职位,我要覆盖Futures类,它包含与工作静态方法futures

资源资源

  • 番石榴项目首页
  • ListenableFuture API
  • 样例代码

参考: Google Guava并发–来自我们的JCG合作伙伴 Bill Bejeck的《可编码的随机思考》博客中的ListenableFuture。

翻译自: https://www.javacodegeeks.com/2012/11/google-guava-concurrency-listenablefuture.html

guava 并发

guava 并发_Google Guava并发– ListenableFuture相关推荐

  1. 【Guava】Google Guava本地高效缓存

    1.Google,Guava本地高效缓存 Guva是google开源的一个公共java库,类似于Apache Commons,它提供了集合,反射,缓存,科学计算,xml,io等一些工具类库.cache ...

  2. Java并发_8.1 并发容器

    并发容器-1 并发容器-1 并发容器概览 父辈同步容器 Vector Hashtable Collections安全化HashMap和ArrayList ConcurrentHashMap(重点) M ...

  3. 【guava】 谷歌guava工具包的常用方法 双key的map 、驼峰转下划线等小结

    文章目录 1. maven引入 (某些框架会引入guava 注意版本冲突问题) 2. guava 对集合的处理 3. guava的 双键table (双key map) 4. guava的文件读写 代 ...

  4. 【Guava】使用Guava的RateLimiter做限流

    2019独角兽企业重金招聘Python工程师标准>>> 一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中, ...

  5. Java并发编程:并发容器之CopyOnWriteArrayList(转载)

    Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...

  6. 网站高并发及高并发架构详解

    高并发是指在同一个时间点,有很多用户同时的访问URL地址,比如:淘宝的双11,双12,就会产生高并发,如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击,再屌丝点的说法就像玩撸啊撸被ADC暴击了一 ...

  7. 慕课网高并发实战(一)-并发与高并发基本概念

    课程网址 并发: 同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程交替得换入或者换出内存,这些线程是同时"存在"的,每个线程都处于执行过程中的某个状态,如果运行在多核 ...

  8. 《MySQL tips:并发查询与并发连接区别》

    并发连接与并发查询,并不是一个概念. 在执行show processlist的结果里,看到了几千个连接,指的是并发连接. 而"当前正在执行"的语句,才是并发查询. 并发连接数多影响 ...

  9. oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...

    [高并发]高并发环境下如何防止Tomcat内存溢出?看完我懂了!! 发布时间:2020-04-19 00:47, 浏览次数:126 , 标签: Tomcat 写在前面 随着系统并发量越来越高,Tomc ...

最新文章

  1. Docker网络解决方案 - Calico部署记录
  2. mysql安装主从配置_MySQL安装与主从配置
  3. 磁盘与目录的容量(转)
  4. 微信小程序禁止页面上下滑动;uni-app微信小程序禁止页面上下滑动;uni-app小程序上下滑动;
  5. Web前端——CSS层叠样式表
  6. 力扣700. 二叉搜索树中的搜索(JavaScript)
  7. 机器学习三个部分:输入、算法、输出 资料收集
  8. 由一个bug引发的SQLite缓存一致性探索
  9. 洛谷 P4344 [SHOI2015]脑洞治疗仪
  10. SpringApplication#run⽅法第5步,打印banner(四)
  11. c# asp.net在线问卷调查系统源码【源码分享】
  12. 经验分布函数(Empirical Distribution Functions)
  13. 生物信息学算法之Python实现|Rosalind刷题笔记:005 GC含量计算
  14. 区块链中的POW是什么
  15. 2021-2027全球与中国天然眼部卸妆产品市场现状及未来发展趋势
  16. 专家不靠谱,秘笈才重要
  17. pygame研究之利用sprite的UI架构实现
  18. 2021年汽车驾驶员(技师)考试题及汽车驾驶员(技师)找解析
  19. 什么是 AI(人工智能(Artificial Intelligence)
  20. Composing Photos Like a Photographer_2021_CVPR论文笔记

热门文章

  1. Oracle入门(十四C)之转换函数
  2. 《此生未完成》痛句摘抄(4)
  3. 人脸检测源码facedetection
  4. 对属性可以赋值的位置
  5. 脚本可以放在html外,关于把script脚本放在html结束标签外的运行结果???
  6. python网络模块_Python的pyroute2网络模块-阿里云开发者社区
  7. 知识复习(LDT+TSS+GATE+INTERRUPT)
  8. aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存
  9. switch字符串jdk_JDK 12 Early Access Build 12中的原始字符串文字支持
  10. Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...