最近做的项目中,有一个特殊需求: 设计一个多机环境中的cache,如果其它服务器更新了数据,需要重新reload数据,更新缓存。但是在没有得到新的cache前,老的cache依然能使用。 这就介于有一个存在的cache实例的同时,可以存在一个正在construct的新cache,自己觉得不像单例模式,姑且就叫一个半例模式
public class CategoryCache
{
private static final Logger logger = Logger .getLogger(CatagoryCache.class);
private static volatile CategoryCache cache;
// after all variants initialized
static
{
cache = new CategoryCache();
}
private CategoryCache()
{
load();
}
static CategoryCache getInstance()
{
return cache;
}
Category getCategory(String name) { ...... }
void addCategory(Category category) { ..... }
public static void process(Object obj)
{
........
reload();
}
private void load() { ........ }
private static synchronized void reload()
{
CategoryCache temp = new CategoryCache();
cache = temp;
}
}
cache在当前jvm只有一个实例,所以都通过getInstance方法获取,需要注意的是,创建cache实例的时候是放在static块中的,原因是不能保证jvm初始化变量的顺序,如果load方法需要使用成员变量,则有可能抛出NullPointException
process是接受到消息时,用于通知当前cache需要重新构建
reload方法实现了重新构建cache.需要注意,不能直写成CategoryCache cache = new CategoryCache(); 因为cache变量被标识为volatile,所以如果在构建的过程,一个线程调用getInstance,会得到一个构建不完全的对象。并且在当前的情况下,其它线程仍然可以使用老得cache,这就出现了一个老的cahce+一个构建中的cache
分享到:
相关推荐
以盒马鲜生为例的O2O模式,其优势在于能够通过线下体验门店引流至线上,实现线上线下互相促进。盒马鲜生采取了“零售+餐饮”的模式,门店面积通常在4000到6000平方米,提供体验式消费,强化顾客信任,并将顾客引入...
总的来说,“半翻转”教学模式是对传统翻转课堂的一种改进和创新,它在高职“数据结构”课程教学中的应用为提高教学效果提供了新的思路和方法。通过该模式,不仅能够加强学生的自主学习能力,还能提升学生的实践操作...
从给定文件中提取的知识点涵盖了半成品菜市场、社区电商平台、数据收集与分析、商业模式创新等多个方面。以下是详细说明: 1. 半成品菜市场的现状与发展前景: 随着人们生活节奏的加快以及健康饮食观念的普及,半...
本文以盒马鲜生为例,深入探讨“O2O+LBS”模式在生鲜电商中的应用和影响。 首先,关于新零售的概念。新零售是马云在2016年云栖大会上提出的概念,它通过互联网整合企业资源,实现线上、线下以及物流深度融合,重构...
新零售理论和生鲜电商实践是...生鲜电商在新零售领域的尝试,已经证明了这种模式的可行性,并且正在引领着电商行业的新一轮发展。随着技术的不断进步和消费者需求的不断升级,新零售生鲜电商有着广阔的发展空间和潜力。
在《中国医院管理》第37卷第11期(总第436期)中,作者探索了一种适合我国国情、符合新医改要求的医疗集团的运行模式。通过案例研究的方式,以上海某医疗集团为例,分析了医疗集团的合作模式、变革前后医疗机构集团...
这个"易语言源码5000例+模块1000个.zip"压缩包,无疑是一个宝贵的资源库,包含了大量易语言的实践案例和可复用模块。 首先,让我们来了解易语言的基本概念。易语言的核心设计理念是“易学易用”,其语法结构直观...
帕默尔旱度模式是一个被广泛认可的干旱评估工具,不仅在美国,在国际上也有相当的影响力。该模式最初是基于蓄满产流模式来计算径流的,即认为土壤含水量达到田间有效持水量之后才能产生径流。但由于这一模式在计算...
本文将深入探讨这种模式的优劣势,并以叮咚买菜为例进行具体分析。 一、前置仓模式的优势 1. 快速响应:前置仓模式的核心在于将仓库设在离消费者更近的地方,大大缩短了配送距离,使得订单能在短时间内完成配送,...
3. 快速配送服务:通过合作物流或者自建配送队伍,提供半小时达、一小时达等快速配送服务,满足消费者即时需求。 4. 个性化推荐:利用大数据分析,根据消费者的购物习惯和偏好,推送个性化商品信息,提升购买转化率...
1. **提供半形式化的框架**:用例模式通过定义参与者、用例及其交互规则,为构建系统故事提供了一个清晰的框架。这种半形式化的方法既避免了过于严格的结构限制,又确保了需求描述的清晰性和一致性。 - **目的性*...
适配器模式是软件设计中的一种常用模式,其核心思想在于将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口能够在一起工作。适配器模式主要用于解决已有类与需要的接口不匹配的情况,从而减少代码的重复...
半分布式水文模型TOPMODEL是一种用于流域水文模拟的工具,能够描述流域内水文过程的空间变异性。通过该模型可以模拟流域的径流响应,对于缺乏水文观测数据的区域,TOPMODEL可以基于地形信息进行径流模拟,这是水文学...
1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在C#中,通常通过静态成员或者懒汉式实现来保证单例的唯一性。 2. **工厂模式**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式...
以监督学习为例,训练一个可靠模型通常需要大量的有标签数据。而在一些场景中,可以通过一些游戏化的手段如ESP Game或ReCaptcha来利用用户的无意识输入来获取大量无标签数据。半监督学习的目标是从有标签和无标签...
遮罩层通常用于在用户进行特定操作时提供一个半透明的覆盖层,以便于突出显示某个区域或暂停其他交互。在这个场景中,"多例"可能意味着同时存在多个独立的遮罩层,每个服务于不同的功能或界面需求。 首先,我们需要...
针对以上传统模式的不足,“食域”APP采取了新的营销策略,结合线上APP与线下美食广场,提供半成品生鲜配送和营养搭配服务。用户不仅能在线上浏览菜谱,还能一键购买所需的生鲜食材,享受便捷的配送服务。同时,APP...
工程招标与投标风险深度分析:以EPC总承包模式为例 本文对工程招标与投标风险进行了深入分析,主要从设计技术风险、施工技术风险、自然及环境风险、政治社会风险、合同风险五个方面进行了探讨。 1. 设计技术风险:...
"Python 100例代码" 是一个针对初学者和进阶者的学习资源,旨在通过实际的编程例子帮助用户掌握Python 3.x的基本概念和常用操作。这份资料涵盖了Python语言的基础到进阶的多个方面,虽然当前只提供了前半部分,但...