单例模式 双重检查
多线程并发访问单利模式需要双重检查,以防出现实例化两次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; } }