单例模式的特点:
1、单例类只能有一个实例
2、单例类必须自己实例化这个实例
3、单例类必须把这个类提供给所有对象
饿汉式单例创建方式:
最简便安全的方法。
public class singleTon(){
private singleTon(){};
private static final singleTon singleton = new singleTon();
public static singleTon getInstance(){
return singleton;
}
}
懒汉式单例创建方式
非线程安全,并发情况下会出问题,原因:java反射机制是能够实例化构造方法为private的类
public class singleton(){
//private单例类构造方法
private singleton(){};
private static singleton single = null;
private static singleton getInstance(){
if(single == null){
single = new singleton();
}
return single;
}
}
改进方案:
1、给getInstance()方法加上同步锁synchronize
private static synchronized singleton getInstance(){
if(single == null){
single = new singleTon();
}
return single;
}
2、静态内部类
原理:先实例化一个final的单例类,然后将构造方法私有化,然后final修饰方法。(方法不能被重写)
public class singleTon(){
private static class lazyHolder(){
private static final singleTon instance = new singleTon();
}
private singleTon(){};
private static final singleTon getInstance(){
return lazyHolder.instance;
}
}