Initialization on demand holder vs double-checked

懒汉模式初始化

public class Singleton {
    /**
     * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
     * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载
     */
    private static class SingletonHolder{
        /**
         * 静态初始化器,由JVM来保证线程安全
         */
        private static Singleton instance = new Singleton();
    }
    /**
     * 私有化构造方法
     */
    private Singleton(){
    }
    public static  Singleton getInstance(){
        return SingletonHolder.instance;
    }
}


缓存检查常用方式

public class LazySingleton {  
    private static volatile LazySingleton instance;  
      
    public static LazySingleton getInstantce() {  
        if (instance == null) {  
            synchronized (LazySingleton.class) {  
                if (instance == null) {  
                    instance = new LazySingleton();  
                }  
            }  
        }  
        return instance;  
    }


你可能感兴趣的:(java,Double锁,静态初始化器)