单例模式——确保一个类只有一个实例,并提供一个全局访问点。
单例模式一般分为懒汉式和恶汉式,懒汉式是说当第一次获取类时才进行类的实例化,饿汉式是说当类被加载时直接实例化。定义单例模式的一般步骤是:
* 定义一个私有的构造函数,以保证这个类不能被外部程序实例化;
* 定义一个类的实例变量,以保存这个类的唯一实例;
* 定义一个获取类唯一实例的静态方法,使外部程序可以获取这个类的唯一实例。
懒汉式:
public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static synchronized Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } }
使用synchronized关键字保证获取实例时,如果实例为null,只有一个线程去创建该实例,但这样做会导致效率低下,下面有更好的解决办法
线程安全的懒汉式:
public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { synchronized (Singleton.class) { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance; } }
用“双重检查加锁”,在getInstance中减少使用同步。volatile关键字确保,当uniqueInstance变量被初始化成 Singleton实例时,多个线程正确的处理uniqueInstance变量。注意,1.4及更早的Java中,许多JVM对于volatile关键 字的实现会导致双重加锁失效。
饿汉式:
public class Singleton { private static Singleton uniqueInstance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return uniqueInstance; } }
饿汉式在类被加载时直接实例化,因此不存在获取实例时的线程安全问题。
相关推荐
——————————————————————————————————————————————
Java设计模式学习笔记
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...
Java JDK 6学习笔记——ppt简体版.rar
java设计模式的学习笔记,其中包含各种模式的代码实现
Java JDK 6学习笔记——ppt简体版加课本代码
Java JDK 6学习笔记——ppt简体版
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
《C++20设计模式》学习笔记-第5章单例模式
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip ...