单例模式:确保一个类只有一个实例,并提供一个全局访问点。通常被用来管理公共资源。例如,数据库连接池或是线程池。
public class Singleton { private static Singleton instance; private Singleton() { System.out.println("There is only on Singleton "); } public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
上面这种写法在多线程下可能会出现问题。假如现在有两个线程A,B, A和B同时进入方法getInstance, A 判断instance为Null,调用私有构造方法创建Singleton的实例,此时B也刚好进入getInstance方法,A还未创建实例成功,此时instance也为null,所以B线程也会调用构造方法创建实例。此时就会出现多线程灾难了。
解决的方法1: 将 getinstance方法前增加关键字:synchronized 关键字。迫使每个线程进入这个方法前先等候别的线程离开该方法。
public synchronized static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; }
这样做可以解决多线程灾难问题,但是会降低性能。事实上,只有在第一次调用getInstance()方法,即instance 还没有被实例之前才需要同步。
解决方法2:使用'急切'创建实例,而不是等到要用的时候再创建。
public class Singleton2 { private static Singleton2 instance = new Singleton2(); private Singleton2() { } public static Singleton2 getInstance() { return instance; } }
解决方法3:用双向检查加锁。在getInstance()方法中减少使用同步。
public class Singleton3 { private Singleton3() { } private static volatile Singleton3 instance; public static Singleton3 getInstance() { if(instance == null) { synchronized(Singleton3.class) { if(instance == null) { instance = new Singleton3(); } } } return instance; } }
相关推荐
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...
笔记_HeadFirst设计模式
Head First 设计模式_源码
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
注意:5,6,7同时解压。Head.First设计模式_PDF(高清中文版)part7
head first 设计模式 比较好的书 暂时只有这些 因为后面的太大暂时传不上去,等以后应该就可以了。大家可以看看
Head First设计模式(完整高清版).pdf,涵盖了各种宝贵的设计思想!
Head First 设计模式学习笔记。更多内容请参见文章内容。
经典的设计模式书籍打包:Head First 设计模式 +Java设计模式(第2版)
head first 设计模式 高清中文版 pdf
如果你曾经读过任何一本深入浅出(Head First)系列书籍,你就会知道能够从本书中得到的是:透过丰富的视觉效果让你的大脑充分地运作。本书的编写运用许多最新的研究,包括神经生物学、认知科学以及学习理论,这使得...
HeadFirst设计模式 读书 笔记
Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First...
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
1.以主次关系介绍了24种设计模式 2.每种设计模式都详细阐述了所遵循的设计原则 HeadFirst 设计模式 walnuting_01 HeadFirst 设计模式 walnuting_02 HeadFirst 设计模式 walnuting_03 一起下载解压。
1.以主次关系介绍了24种设计模式 2.每种设计模式都详细阐述了所遵循的设计原则 HeadFirst 设计模式 walnuting_01 HeadFirst 设计模式 walnuting_02 HeadFirst 设计模式 walnuting_03 一起下载解压。
1.以主次关系介绍了24种设计模式 2.每种设计模式都详细阐述了所遵循的设计原则 3.HeadFirst 设计模式 walnuting_01 HeadFirst 设计模式 walnuting_02 HeadFirst 设计模式 walnuting_03 一起下载解压。
Head.First设计模式_PDF 高清
Head.First设计模式_PDF 高清