`

高效可伸缩的结果缓存

阅读更多
/**
 * 要执行的算法,返回结果v
 */
public interface Computable<A, V> {
	public V comput(final A arg);

}

 

/**
 * 用于缓存数据
 */
public class Memoizer<A, V> implements Computable<A, V> {

	private final ConcurrentMap<A, Future<V>> cache = new ConcurrentHashMap<A, Future<V>>();

	private final Computable<A, V> c;

	private Memoizer(Computable<A, V> c) {
		this.c = c;
	}

	@Override
	public V comput(final A arg) {
		while (true) {
			Future<V> f = cache.get(arg);
			if (f == null) {
				Callable<V> eval = new Callable<V>() {

					@Override
					public V call() throws Exception {
						return c.comput(arg);
					}
				};
				FutureTask<V> ft = new FutureTask<V>(eval);
				//若没有这个key则put。总是返回oldValue
				f = cache.putIfAbsent(arg, ft);
				if (f == null) {
					f = ft;
					ft.run();
				}

			}
			return null;
		}
	}

}

 

1
0
分享到:
评论

相关推荐

    构建高效可伸缩的缓存demo

    这是如何构建高效可伸缩的缓存的demo,包含了博客中提到的所有代码以及测试案例。

    《java并发编程实战》读书笔记-第5章-基础构建模块

    《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括同步容器类、并发容器类、阻塞队列和生产者消费者模式、阻塞和中断方法、同步工具类。最后是构建高效且可伸缩的结果缓存

    solr 企业搜索引擎教程

     可配置的查询结果,过滤器,和文档缓存实例  可插拔的缓存实现  后台缓存热启:当一个新的搜索器被打开时,可配置的搜索将它热启,避免第一个结果慢 下来,当热启时,当前搜索器处理目前的请求(???)。  后台自动热...

    Java并发编程实践 PDF 高清版

    5.6 为计算结果建立高效、可伸缩的高速缓存 第2部分 构建并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.2 Executor 框架 6.3 寻找可强化的并行性 第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 ...

    JAVA并发编程实践_中文版(1-16章全)_1/4

    5.6 为计算结果建立高效、可伸缩的高速缓存 第2部分 构建并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.2 executor 框架 6.3 寻找可强化的并行性 第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 ...

    Java并发编程part2

    5.6 为计算结果建立高效、可伸缩的高速缓存 第2部分 构建并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.2 executor 框架 6.3 寻找可强化的并行性 第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 ...

    Java并发编程实践part1

    5.6 为计算结果建立高效、可伸缩的高速缓存 第2部分 构建并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.2 executor 框架 6.3 寻找可强化的并行性 第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 ...

    Java并发编程实战

    5.6 构建高效且可伸缩的结果缓存 第二部分 结构化并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.1.1 串行地执行任务 6.1.2 显式地为任务创建线程 6.1.3 无限制创建线程的不足 6.2 Executor框架 6.2.1...

    Java 并发编程实战

    5.6 构建高效且可伸缩的结果缓存 第二部分 结构化并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.1.1 串行地执行任务 6.1.2 显式地为任务创建线程 6.1.3 无限制创建线程的不足 6.2 Executor框架 6.2.1...

    数飞OA系统登录助手

    l 使用J2EE标准,结合国内客户的实际环境,为客户提供可伸缩、灵活、易维护的商务系统。 l 提供良好的机制,保留现存的IT资产,支持各种异构环境,使用B/S多层架构,结合数据缓存和数据库连接池模型,支持多种主流...

    基于Springcloud+mysql的分布式架构网上商城设计与实现(源码+设计文档+部署说明+视频演示).zip

    分布式缓存:系统使用分布式缓存,如Redis、Memcached等,提高系统的访问速度和性能,减轻数据库的压力。 异步消息处理:系统利用消息队列,如Kafka、RabbitMQ等,实现异步消息处理,如订单支付结果通知、库存变更...

    J2EE系统设计方案(1).doc

    J2EE系统技术方案 J2EE系统技术方案 1 一、 技术平台 2 1. J2EE的概念 3 2. J2EE的优势 3 3. J2EE相关核心技术 4 4. 轻量级J2EE架构 5 二... 可伸缩性: 企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩

    J2EE系统设计方案.doc

    J2EE系统技术方案 J2EE系统技术方案 1 一、 技术平台 2 1. J2EE的概念 3 2. J2EE的优势 3 3. J2EE相关核心技术 4 4. 轻量级J2EE架构 5 二... 可伸缩性: 企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩

    碱性:碱是功能性React性数据流的库,这些数据流可驱动基于本机的UI元素

    Alkali使用真正的功能性React,基于缓存和失效的系统来提供速度和可伸缩性,该系统可提供优化的按需渲染性能。 这使得构建高效,快速的应用程序成为可能,使用标准JavaScript对象使用现代的功能性响应技术来驱动UI...

    深入解析Windows操作系统中文.part2.rar

    可伸缩性 46 客户和服务器版本之间的差异 47 检查版本 49 2.4 关键的系统组件 51 环境子系统和子系统DLL 53 硬件抽象层(HAL) 67 设备驱动程序 69 系统进程 75 2.5 本章总结 84 第3章 系统机制 85 3.1 陷阱分发 85 ...

    Asp.Net Forums 2 v1.1 源代码.zip

    方便的功能可伸缩设计 特别适合大型网站和超人气论坛 特别基于大型综合网站开发论坛系统 支持RSS 2.0在线订阅功能 在线调查投票 新贴邮件通知 回贴邮件通知 会员邮件发送 站内短信发送 Microsoft SQL ...

    enseada:Cloud本机多包注册表

    它通过使用本机分布式技术来利用可伸缩性。 请查阅以获取完整的操作手册。 产品特点 基于令牌的强身份验证 灵活的ACL引擎来管理用户权限 完善的 CDN和缓存友好 注册表本身是用编写的, 是一种快速,资源高效且...

    java8集合源码分析-JavaBooks:书籍

    高可用架构,高可用可伸缩微服务架构:基于Dubbo、Spring Cloud和Service Mesh 微服务架构设计模式 11.重构与系统改造 大型网站技术架构演进与性能优化 发布!设计与部署稳定的分布式系统 重构:改善既有代码的设计 ...

    asp.net Forums 0831版

    无需网站目录的写权限 极强的系统性能与伸缩性 大量应用缓存以提升系统的性能和浏览速度 方便的功能可伸缩设计 特别适合大型网站和超人气论坛 特别基于大型综合网站开发论坛系统...

Global site tag (gtag.js) - Google Analytics