单例模式,这个类永远只有一个对象,无论new多少次,得到的对象都是同一个。
实现一个单例模式需要3个条件:
1.私有的构造函数,这个保证用户无法自己new一个对象。
2.有一个获取该类对象的方法,用户只可能同类这个方法来获取一个该类的对象。
3.定义一个唯一的对象,只能返回这个对象的引用。
今天写单例模式的快加载和慢加载。
快加载:在这个对象第一次被引用前就初始化,这个的问题是如果这个类没有被用到也会初始化。
class SingleTon{
private static SingleTon single = new SingleTon();
public static SingleTon instance(){
return single;
}
private SingleTon(){
}
}
慢加载:在这个对象第一次被引用前就初始化,这个的问题是在多线程下是不安全的。
class SingleTon{ private static SingleTon single; public static SingleTon instance(){ if(single == null){ single = new SingleTon(); } return single; }
另外慢加载也可以变成多线程安全的。使用到内部类,jvm会保证静态域的内存开辟和初始化是一个原子操作class SingleTon{ private static class InnerClass{ private static SingleTon single = new SingleTon(); } public static SingleTon instance(){ return InnerClass.single; } private SingleTon(){ } }