单例模式中的双重锁定 及新型单例设计
在单例模式中有一种延时实例化方法,
当调用get方法获取单例时,判断是否已经实例化,如果没有,则创建该实例并返回。如果有直接返回。
在这个过程中如果考虑多线程并发问题,我们需要用双重锁定来保证该实例的单一性。
public class Singleton {private Singleton (){}private static Singleton main;/** * 双重锁定 * @return */public static Singleton get(){if(main==null){synchronized (Singleton.class) {if(main==null){main=new Singleton();}}}return main;}public static void main(String[] args) throws Exception{System.out.println(Singleton.get().toString());} @Overridepublic String toString() {return "I am Singleton ";}}
public class Singleton {private Singleton (){}private static Singleton main=new Singleton();}
public class Singleton { static class SingletonHolder { static Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.instance; } }