`

关于单例模式的小记

 
阅读更多

今天看到单例模式,10分钟就把这节过完了,确实是最简单的模式。但是该模式在并发的时候,确实很容易出问题,如下:
第一个问题就像《HeadFirst》上提醒的,获取单例的时候需要加锁(或者双保险检查、饱汉初始一个对象等),否则就不是真是真正的单例了。

public static synchronized Sington getInstance(){
     if(instance==null){
        instance = new Singleton();
}
return instance;
}
 

如果不加锁,在并发的时候,可能两个线程读到instance为空,都去创建了实例。

第二个问题,是以前我测Lucene的时候遇到的,读Lucene文件的Reader是一个单例,在main方法中执行没有问题,大并发做压力测试时候,reader.doSomething()这个方法就抛出空指针。而调用该方法之前是对reader做了非空判断的。

记不清具体的方法了,大概举例模拟下下面的场景
读索引的方法:

public void read(){
If(reader!=null){
   reader.doSomething();//这句话报NullPointException
}
}

 跟新索引的方法:

public void update(){
If(reader!=null){
   …
   …
   reader = null;
}
}

 由于reader是个单例,一个线程A判断reader是非空的,还没来得及执行reader.doSomething(),这个时候另外一个线程B刚好又把reader置为空了,于是线程A继续执行到reader.doSomething就抛出NullPointException了~~
 

分享到:
评论
1 楼 boli.jiang 2011-12-12  
好厉害的二妹

相关推荐

    【咬人草小记,阅读附答案】 咬人草小记阅读答案.docx

    这篇文章《咬人草小记》便是对这种植物的描述,以及作者与它亲密接触后的体验与思考。 文章的开始,是一段友人的警告:“这草,你可不能碰!”正是这句话,将作者的注意力引向了这种奇特的生物。咬人草的外表并...

    Linux boost库安装、编译问题小记

    环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。  boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。  全部编译是很痛苦的过程

    java小记.rar

    这份"java小记.rar"压缩包很可能包含了作者多年从事Java Web开发的经验总结,可能包括代码示例、笔记、最佳实践等内容。 在Java Web开发中,Servlet是核心部分,它是一个Java类,用于扩展服务器的功能,处理HTTP...

    android开发小记

    在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...

    每日小记,记录账单和日记

    这种直观的展示可以帮助用户更好地理解自己的消费模式,比如哪个月份花费最多,哪个类别经常超出预算。同时,对于日记部分,应用可能也提供了按日期或关键词搜索的功能,方便用户回顾特定的时刻或事件。 此外,为了...

    关于发展学生空间观念的主题教研活动小记.pptx

    关于发展学生空间观念的主题教研活动小记.pptx

    C++编程小记,经典收藏

    ### C++11 新特性详解 #### 一、Auto 关键字的新用途 - **旧用途**:在C++11之前,`auto`关键字主要用于指定变量的存储期。 - **新用途**:C++11引入了类型推断的概念,`auto`变成了一个类型占位符,用于告诉...

    随笔小记.doc

    随笔小记.doc

    GeoStudio学习小记.pdf

    GeoStudio学习小记

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备_rezip.zip

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备_rezip

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备1_rezip.zip

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备1_rezip

    数据字典-小记及用户部分1

    以下是对标题"数据字典-小记及用户部分1"中所提及的数据元素进行的详细说明: 1. 用户数据元素: - **账号**:用户ID,类型为int,长度11,用于唯一标识每个用户。 - **密码**:字符串类型,长度20,存储用户登录...

    数据结构习题总结 拾荒小记

    2. **模式匹配**:这是一个在字符串中寻找特定子串的问题,常见的算法有KMP(Knuth-Morris-Pratt)算法和Boyer-Moore算法,它们在文本搜索和文本处理中非常实用。 3. **矩阵**:矩阵是二维数组,常见的操作有矩阵...

    python进行爬虫小记

    正则表达式是一种常见的方式,可以匹配特定的字符串模式。例如,使用`re`库编写的正则表达式可以匹配并提取链接或特定文本。然而,对于更复杂的HTML结构,推荐使用XPath或CSS选择器。XPath是XML路径语言,可以通过`...

    刘重威将军小记.docx

    刘重威将军小记.docx

    随笔小记文档及若干代码

    随笔小记的文档,自己记录的一些文档,仅供参考

    海居小记_csdn

    描述“海居小记”并未给出详细信息,因此我们无法从这个描述中得出更多关于文章内容的知识点。 从标签“课件”来看,这部分内容有可能是一份教育性质的材料,比如可能用于教学的文档或演示文稿的一部分。但由于内容...

    “大二”生活小记.docx

    他们通过“一帮一”的互助学习模式,让学习成绩好的学生帮助那些在学习上遇到困难的同学,体现了同学们之间的团结互助。这种自发的学习方式在很大程度上缓解了师资力量不足所导致的教学难题,也展现了学生们对知识的...

    当代班主任工作小记.doc

    当代班主任工作小记.doc

Global site tag (gtag.js) - Google Analytics