单例模式
1.单例模式作用:简化复杂环境下的配置管理
多线程中小心使用:可能会造成创建两个对象。(可以加互斥锁解决)
2.懒汉模式
第一次被引用时才将自己实例化,称为懒汉模式
(1)普通单例模式:
public Singleton{ private static Singleton instance=null; /**封堵外界调用**/ private Singleton(){ } public static Singleton getInstance (){ if(instance==null){ instance=new Singleton(); } return instance; } }
(2)多线程下单例模式:
public Singleton{ private static volatile Singleton instance=null; /**封堵外界调用**/ private Singleton(){ } public static Singleton getInstance (){ if(instance==null){ synchronized(Singleton.class){ /**double-check locking**/ if(instance==null){ instance=new Singleton(); } } } return instance; } }
这个链接讨论了double-check locking 失效的情况
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
3.饿汉模式
类加载时便实例化,称为饿汉模式。
public Singleton{ private final static Singleton instance=new Singleton(); /**封堵外界调用**/ private Singleton(){ } public static Singleton getInstance (){ return instance; } }