设计模式--Singleton pattern and Double-checked locking
1、定义
《public class SingletonPatternA {private static SingletonPatternA instance = new SingletonPatternA();private SingletonPatternA() {};public static SingletonPatternA getInstance() {return instance;}} ? 说明: ?? *在静态初始化器中创建单件,保证线程安全。 ?? * 构造方法为私有 ? (2)使用延迟实例化 ?说明: ??? *利用静态变量 ??? *构造方法为私有 ??? *getInstance()存在着线程安全问题,所以要增加synchronized关键字。 ? 3、由于synchronized getInstance() 同步一个方法可能使程序执行效率下降100倍,利用“double-checked locking”来减少getInstance()方法必须是sychronized的改进。 ? ?注意:在1.4及更早版本的java中,许多JVM对volatile关键字的实现会导致"双重检查加锁"的失效,如果使用1.4及以下java版本请不要使用volatile关键字。 ? ?public class SingletonPatternB {private static SingletonPatternB uniqueInstance;private SingletonPatternB() {}public static synchronized SingletonPatternB getInstance() {if (uniqueInstance == null)uniqueInstance = new SingletonPatternB();return uniqueInstance;}}
public class SingletonPatternC {private static volatile SingletonPatternC singleton;private SingletonPatternC() {}public static SingletonPatternC getInstance() {if (singleton == null) {synchronized (SingletonPatternC.class) {if (singleton == null) {singleton = new SingletonPatternC();}}}return singleton;}}