`
卒子99
  • 浏览: 74022 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个半例模式

阅读更多

最近做的项目中,有一个特殊需求: 设计一个多机环境中的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

分享到:
评论
2 楼 williamy 2008-04-15  
老的cache不過期,新cache生成的結束刪除老cache不就是你想要的?

你這個模式就有且只有你用且只用一次!
1 楼 卒子99 2008-04-15  
相当奇怪,javaeye的编译器好像有点问题,感觉没有以前的好用

相关推荐

    论文研究 - 生态土地利用多样性与安全模式建设-以安庆为例

    生态安全是自然半自然生态系统的生态完整性和健康水平的总体反映。 本研究基于空间转移矩阵,基于安庆市2005年和2017年的现状图,获得了生态土地利用变化的定量结果。我们将生态敏感性的叠加分析与生态扰动评估相...

    Visual C++实效编程百例光盘源代码

    第1章 界面外观   实例1 带图标的菜单  ... 实例106 建立一个快捷方式   实例107 设置程序为自动被执行   实例108 注册与卸载OCX   实例109 限定程序的使用时限   实例110 在IE工具栏中加入快捷图标

    VC++6.0实效编程百例

    目录 第一章 1·带图标的菜单 2·显示倾斜文字 3·文字的颜色渐变 ...106·建立一个快捷方式 107·设置程序为自动被执行 108·注册与卸载OCX 109·限定程序的使用时限 110·在IE工具栏中加入快捷图标

    S7-200西门子PLC例程源码100例合集.zip

    s7 200做的转盘的程序,6个工位.rar S7 Array and Indirect Addressing Examples and Basics.zip s7-200 modbus主、从站例子程序.rar S7-200 modbus主从站标准例程.rar S7-200 Modbus主站通讯程序.rar S7-200 Modbus...

    论文研究 - 巴勒斯坦加沙地带2型糖尿病患者的饮食模式及其与抑郁的关系

    收集参与者的人口统计,社会经济和病史数据,并使用98项半定量食物频率调查表评估饮食模式。 使用SPSS 20版进行统计分析。结果:根据抑郁量表,29.0%的2型糖尿病患者患有抑郁症(女性为58.3%,男性为41.7%)。 ...

    《VC++.NET精彩百例》配套代码

    《VC++.NET精彩百例》配套代码 [涉及平台] VC++.NET [作者] void [文件大小] 2969KB [更新日期] 2005-10-30 一、资源说明 第1章 界面编程 实例1 "欢迎"界面 实例2 动态字幕效果 实例3 透明窗体 实例4 ...

    Linux 内核IPSec(xfrm)协议栈源码分析

    很清楚的分析了一个数据包如何通过查询路由进入内核ipsec协议栈的处理、Linux 内核ipsec协议栈详细的加解密流程以及加解密完后如何将数据包发送出去。 文档中前半部分主要介绍一些关键的数据结构,及其相互之间的...

    红图新媒体发展(重庆)有限公司发展模式

    没有巨大的设备和成本,发展起来相对容易,一个人一杆笔就可以支撑起来。但身处在经济下行的大环境里,实体商品还具有保值的作用,虚拟的价值更可能首先受到冲击。  如果你身处的公司新媒体收入比较单一,对于外部...

    智慧校园--闽江学院安防综合监管系统解决方案66页.docx

    1、前端摄像机选型应根据不同应用场景的不同监控需求,选择不同类型或者不同组合的摄像机,室外可以选择高清红外防水枪机与高清智能球机搭配使用,交叉互动原则,以基本保证监控空间内的无盲区、全覆盖。...

    多媒体实验教程.pdf

    5、 新建一个图层,填充白色,加上图层蒙版,用黑色画笔把人物部分 擦出来。确定后合并所有图层,完成最终效果。 例二: 1、 打开素材图片,把背景图层复制一层。 2、调整通道混合器,对黑色进行调整,+92,+20,0...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

    论文研究 - 子宫内膜的组织病理学模式:斯里兰卡拜蒂克洛教学医院的医院研究

    方法:回顾性,横断面,基于医院的研究进行了为期五年半的研究,其中包括1884个样本,这些样本通过内采样和刮宫法采集,以评估几种妇科症状。 结果:年龄分布范围为16至83岁。 (242/1884)样本中有12.8%不足以...

    张性边缘海的成因演化特征及沉积充填模式——以珠江口盆地为例 (2004年)

    珠江口盆地的形成和演化过程经历了晚白垩世至渐新世的裂陷—晚渐新世至中中新世的热沉降—晚中新世至今的断块升降3个演化阶段,沉积了陆相—半封闭海相—开阔海相3套不同的沉积体系组合。总结归纳出珠江口盆地新生代...

    具有高频链接的双向降压-升压DC-DC斩波模式组合逆变器

    这两个斩波器在输入端并联,在输出端串联,产生分别具有正和负半个低频周期的单极性正弦脉宽调制电流波形。 电路拓扑系列包括四种电路拓扑,例如单晶体管模式。 以单晶体管模式电路拓扑为例,设计并实现了750VA48...

    半刚接钢框架系统刚度的可靠性分析 (2010年)

    将梯度优化法与有限元法相结合,探讨了隐式功能函数可靠度算法,通过算例对比分析半刚接与刚接钢框架系统刚度的主要失效模式,同时用PNET法探讨了节点转动刚度和P-△二阶效应对结构系统刚度可靠度的影响....

Global site tag (gtag.js) - Google Analytics