登陆注册
8183300000055

第55章 6 单体对象的同步(单体模式与多线程)

大B:“在多线程模式下,惰性初始化会使多个线程同时初始化该单体,造成一个JVM中多个单例类型的实例,如果这个单例类型的成员变量在运行过程中发生变化,会造成多个单例类型实例的不一致。”

小A:“那应该怎么办?”

大B:“加个同步修饰符:public static synchronized Singleton getInstance()。这样就保证了线程的安全性。这种处理方式虽然引入了同步代码,但是因为这段同步代码只会在最开始的时候执行一次或多次,所以对整个系统的性能不会有影响。”

小A:“在更新属性的时候,会造成属性的读写不一致。那应该怎么处理?”

大B:“1、读者/写者的处理方式。设置一个读计数器,每次读取信息前,将计数器加1,读完后将计数器减1.使用notifyAll()解除在该对象上调用wait的线程阻塞状态。只有在读计数器为0时,才能更新数据,同时调用wait()方法要阻塞所有读属性的调用。2、采用‘影子实例’的办法。具体说,就是在更新属性时,直接生成另一个单例对象实例,这个新生成的单例对象实例将从数据库,文件或程序中读取最新的信息;然后将这些信息直接赋值给旧单例对象的属性。”

小A:“嘿嘿!师兄,能不能举例来看一下啊?”

大B:“好的。”

例子:

public class GlobalConfig{

private static GlobalConfig instance;

private Vector properties=null;

private boolean isUpdating=false;

private int readCount=0;

private GlobalConfig(){

//Load configuration information from DB or file

//Set values for properties

}

private static synchronized void syncInit(){

if(instance……null){

instance=new GlobalConfig();

}

}

public static GlobalConfig getInstance(){

if(instance……null){

syncInit();

}

return instance;

}

public synchronized void update(String pdata){

syncUpdateIn();

//Update properties

}

private synchronized void syncUpdateIn(){

while(readCount>0){

try{

wait();

}catch(Exception e){

}

}

}

private synchronized void syncReadIn(){

readCount ;

}

private synchronized void syncReadOut(){

readCount――;

notifyAll();

}

public Vector getProperties(){

syncReadIn();

//Process data

syncReadOut();

return properties;

}

}

public class GlobalConfig{

private static GlobalConfig instance;

private Vector properties=null;

private boolean isUpdating=false;

private int readCount=0;

private GlobalConfig(){

//Load configuration information from DB or file

//Set values for properties

}

private static synchronized void syncInit(){

if(instance……null){

instance=new GlobalConfig();

}

}

public static GlobalConfig getInstance(){

if(instance……null){

syncInit();

}

return instance;

}

public synchronized void update(String pdata){

syncUpdateIn();

//Update properties

}

private synchronized void syncUpdateIn(){

while(readCount>0){

try{

wait();

}catch(Exception e){

}

}

}

private synchronized void syncReadIn(){

readCount ;

}

private synchronized void syncReadOut(){

readCount――;

notifyAll();

}

public Vector getProperties(){

syncReadIn();

//Process data

syncReadOut();

return properties;

}

}

同类推荐
  • 悟道:一位IT高管20年的职场心经

    悟道:一位IT高管20年的职场心经

    本书是一位有20多年职场经验的IT企业高管撰写的一系列有关职场悟道的短文集成,讲述的是在企业里如何修炼自己,如何摆平自己的心态,怎样做到“世事洞明”和“人情练达”,如何“搞定老板”,怎样做到工作和生活平衡等诸多话题,涉及到跳槽、转行、升迁、环境、沟通、老板、下属、老外等等。每一篇都以作者的亲身经历或者身边的故事说明道理,语言简洁流畅,妙趣横生,更有不少经典片段和发人深省的职场警句,读起来就像是一个睿智幽默的老朋友坐在你面前娓娓道来。
  • 我看电商

    我看电商

    本书是作者近30年从事零售及电子商务管理的总结和分享。近年来电商行业在中国迅猛发展,2012年网络零售市场规模达到13,000亿人民币,诞生了淘宝、天猫、京东、当当、凡客、唯品会……等一大批全新的网络公司,电子商务正在日益深入的影响着越来越多人的生活。如今这位自称跨界老兵的电商操盘手第一次全方位剖析电商风云,细说中美电子商务发展的不同路径,评点国内各大电商企业的是是非非,详解其中的融资、模式、运营、效率……个中经验,毫无保留的娓娓道来,笔触至深,让人不禁掩卷沉思。
  • 如何建设网站

    如何建设网站

    本书以问答的方式介绍了建设网站的基本知识,内容包括:网站设计的八个步骤、建设网站需要掌握的工具软件、网页中插入图像、在网页中隐藏内容等。
  • 成为淘宝创业的超级毕业生

    成为淘宝创业的超级毕业生

    本书讲述如何通过淘宝创业将大学在校生打造成为“超级毕业生”。主要内容包括大学生从事淘宝创业的理论基础、学以致用的操作指南,以及可资借鉴的案例。书中的理念篇可供对创业教育感兴趣的高校教师参考;实战篇提出的“淘宝十二招”,操作简单,易学易用;案例篇讲述了十位成功在校创业大学生的故事,主要供学生参考。读完本书,相信凡是关注大学教育者或希望通过淘宝创业的大学生,皆能从中获得启发,对创业从无心变有心,从有心变行动,亲身投入或参与到这个伟大的事业中来。
  • 爱上我的“手机女友”

    爱上我的“手机女友”

    本书共有五个部分:第一章:千娇百媚的我—手机门类大搜索第二章:了解我的心—手机“芯”理学第三章:不一样的我不一样的美—手机的万种风情第四章:命中注定我爱你—神秘手机星座解读第五章:有求必应贴心女友—手机的绝世武功通过这本书,想要购入手机的你会知道哪款手机女友更适合你,已有心仪手机的你可以让手机女友懂得更多变得更聪明。希望这本书能够帮助你在手机选购上和手机使用上更舒心、安心、贴心。
热门推荐
  • 斗龙战士之星火重燃

    斗龙战士之星火重燃

    不坚定,满脑子复仇,无情。一手策划了计谋,一切都是假的,曾经的都是假装的,她伤害了他们,次又一次的伤害,无情的语言比刀还锋利,当她醒悟的时候,已经是万劫不复了。她后悔,她原谅不了自己,既然重来一次,她绝对不会再允许那样的事再发生,即使从此消失,被遗忘,也心甘情愿,只要他们安好,便足以.....
  • 洛克王国之重生

    洛克王国之重生

    一次意外,她发现自己拥有“超能力”,穿越到了洛克王国,她发现自己拥有很多不同的身份。她是谁?她究竟是人类?是洛克?是宠物?还是。。。
  • 马太效应

    马太效应

    马太效应(MatthewEffect),指强者愈强、弱者愈弱的社会现象。马太效应直接关系个人事业的成功和企业的发展,它为成功者走向更大的成功提供了方法,也为失败者超越失败指明了方向。本书着重介绍了马太效应的来源、作用机制以及工作生活中面对马太效应该以怎样的态度和方式做事才能走向成功,成为强者愈强的强者。
  • 天下美文校园卷:时光里,有我奔跑的青春

    天下美文校园卷:时光里,有我奔跑的青春

    本文精选著名作家古保祥的校园生活类文章,内容以校园生活为主线,记叙了温暖的亲情、美好的友谊,还有纯真如月般的师生情感,讴歌了老师的辛勤付出、家长的谆谆告诫、学子的凌云壮志,是不可多得的学生阅读佳品。对陶冶情操、激励斗志、指导成长,都有着不可小觑的作用。
  • 无良首席逗佳人

    无良首席逗佳人

    你是无良首席,我是绝世佳人,但当我出现的时候,你这个无良首席要乖乖听我这个绝世佳人的话,而不是逗着我玩!
  • 女骗子的爱情故事

    女骗子的爱情故事

    一个“女骗子”,她以纯真的心看待对待她的朋友可她在一天却发现她身边的人不是真心代她,她就变成了一个玩弄身边感情的人直到有天,一个男孩的介入使她重新开始了自己的生活,并且勇往直前。
  • 星河深处初半夏

    星河深处初半夏

    “dawn”是电竞的神话,是所有电竞粉崇拜和信仰的人。可在一天之内,关于“dawn”的所有赛事都消失不见,“dawn”就这样被人们所遗忘,可那份信念依然在他们心中烙印,似乎那个曾经夺下数次世界电竞赛冠军的“dawn”依然在身边。而T盟战队却在那时再此燃烧起人们心中那颗热爱电竞的心,“dawn”回归又是何时……
  • 血型与星座(A)

    血型与星座(A)

    血型影响性格,性格决定命运。一本带有神秘科学色彩的《血型与星座A》,将引领你踏上认清自己、了解他人的探索之旅。在轻松的探索旅程中你将意外发现A型人独特的性格解码、职场潜能的法则、婚姻爱情的视点攻略、健康的养生秘诀以及轻松理财的灵活小妙招。
  • 王爷的逃妃

    王爷的逃妃

    萧沐沐,一个现代女孩,一觉睡醒后来到了赤炎大陆。什么?天下一统?黎民苍生?绝密宝藏?与她何干。她要回家!她要逃跑!可是,冷情骄傲的他,将她紧扣怀中,霸道说道:“做我的女人。我会给你和嫡妻一样的荣宠。”温润如玉的他,将她的手按到自己的左胸口,温柔说道“我要保护你,以我的所有,包括我的命。”清逸俊朗的他,望着她的眼睛,认真说道:“此生已无他愿,惟愿你记得,你的生命里曾有个我。”面对如此深情,萧沐沐将会何去何从呢?
  • 胜者为王

    胜者为王

    辱我者,欺我者,害我者,十倍奉还!我不懂年少轻狂,只知道胜者为王!