guava 并发_Google Guava并发– ListenableFuture
guava 并发
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
产生的结果,并指定onSuccess
和onFailure
方法。 这是一个例子:
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相关推荐
- 【Guava】Google Guava本地高效缓存
1.Google,Guava本地高效缓存 Guva是google开源的一个公共java库,类似于Apache Commons,它提供了集合,反射,缓存,科学计算,xml,io等一些工具类库.cache ...
- Java并发_8.1 并发容器
并发容器-1 并发容器-1 并发容器概览 父辈同步容器 Vector Hashtable Collections安全化HashMap和ArrayList ConcurrentHashMap(重点) M ...
- 【guava】 谷歌guava工具包的常用方法 双key的map 、驼峰转下划线等小结
文章目录 1. maven引入 (某些框架会引入guava 注意版本冲突问题) 2. guava 对集合的处理 3. guava的 双键table (双key map) 4. guava的文件读写 代 ...
- 【Guava】使用Guava的RateLimiter做限流
2019独角兽企业重金招聘Python工程师标准>>> 一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中, ...
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...
- 网站高并发及高并发架构详解
高并发是指在同一个时间点,有很多用户同时的访问URL地址,比如:淘宝的双11,双12,就会产生高并发,如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击,再屌丝点的说法就像玩撸啊撸被ADC暴击了一 ...
- 慕课网高并发实战(一)-并发与高并发基本概念
课程网址 并发: 同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程交替得换入或者换出内存,这些线程是同时"存在"的,每个线程都处于执行过程中的某个状态,如果运行在多核 ...
- 《MySQL tips:并发查询与并发连接区别》
并发连接与并发查询,并不是一个概念. 在执行show processlist的结果里,看到了几千个连接,指的是并发连接. 而"当前正在执行"的语句,才是并发查询. 并发连接数多影响 ...
- oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...
[高并发]高并发环境下如何防止Tomcat内存溢出?看完我懂了!! 发布时间:2020-04-19 00:47, 浏览次数:126 , 标签: Tomcat 写在前面 随着系统并发量越来越高,Tomc ...
最新文章
- Docker网络解决方案 - Calico部署记录
- mysql安装主从配置_MySQL安装与主从配置
- 磁盘与目录的容量(转)
- 微信小程序禁止页面上下滑动;uni-app微信小程序禁止页面上下滑动;uni-app小程序上下滑动;
- Web前端——CSS层叠样式表
- 力扣700. 二叉搜索树中的搜索(JavaScript)
- 机器学习三个部分:输入、算法、输出 资料收集
- 由一个bug引发的SQLite缓存一致性探索
- 洛谷 P4344 [SHOI2015]脑洞治疗仪
- SpringApplication#run⽅法第5步,打印banner(四)
- c# asp.net在线问卷调查系统源码【源码分享】
- 经验分布函数(Empirical Distribution Functions)
- 生物信息学算法之Python实现|Rosalind刷题笔记:005 GC含量计算
- 区块链中的POW是什么
- 2021-2027全球与中国天然眼部卸妆产品市场现状及未来发展趋势
- 专家不靠谱,秘笈才重要
- pygame研究之利用sprite的UI架构实现
- 2021年汽车驾驶员(技师)考试题及汽车驾驶员(技师)找解析
- 什么是 AI(人工智能(Artificial Intelligence)
- Composing Photos Like a Photographer_2021_CVPR论文笔记
热门文章
- Oracle入门(十四C)之转换函数
- 《此生未完成》痛句摘抄(4)
- 人脸检测源码facedetection
- 对属性可以赋值的位置
- 脚本可以放在html外,关于把script脚本放在html结束标签外的运行结果???
- python网络模块_Python的pyroute2网络模块-阿里云开发者社区
- 知识复习(LDT+TSS+GATE+INTERRUPT)
- aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存
- switch字符串jdk_JDK 12 Early Access Build 12中的原始字符串文字支持
- Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...