单例模式 双重检查

多线程并发访问单利模式需要双重检查,以防出现实例化两次Singleton实例的情形,如果是数据库连接池,初始化两次会导致第一次数据库连接已经使用,第二次发生异常错误。

 

方案一

class Singleton{
    private static Singleton singleton;    
    private Singleton(){}
    
    public static Singleton getInstance(){
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null)
                    singleton = new Singleton();
            }
        }
        return singleton;
    }
}

 

方案二

class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton () {}

    public static Singleton getInstance() {
        return singleton;
    }
}

 

posted @ 2019-03-27 09:12  webglcn  阅读(258)  评论(0编辑  收藏  举报