浏览 1990 次
锁定老帖子 主题:一个半例模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-15
最近做的项目中,有一个特殊需求: 设计一个多机环境中的cache,如果其它服务器更新了数据,需要重新reload数据,更新缓存。但是在没有得到新的cache前,老的cache依然能使用。 这就介于有一个存在的cache实例的同时,可以存在一个正在construct的新cache,自己觉得不像单例模式,姑且就叫一个半例模式
public class CategoryCache cache在当前jvm只有一个实例,所以都通过getInstance方法获取,需要注意的是,创建cache实例的时候是放在static块中的,原因是不能保证jvm初始化变量的顺序,如果load方法需要使用成员变量,则有可能抛出NullPointException process是接受到消息时,用于通知当前cache需要重新构建 reload方法实现了重新构建cache.需要注意,不能直写成CategoryCache cache = new CategoryCache(); 因为cache变量被标识为volatile,所以如果在构建的过程,一个线程调用getInstance,会得到一个构建不完全的对象。并且在当前的情况下,其它线程仍然可以使用老得cache,这就出现了一个老的cahce+一个构建中的cache 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-15
相当奇怪,javaeye的编译器好像有点问题,感觉没有以前的好用
|
|
返回顶楼 | |
发表时间:2008-04-15
老的cache不過期,新cache生成的結束刪除老cache不就是你想要的?
你這個模式就有且只有你用且只用一次! |
|
返回顶楼 | |