饿汉式单例(无线程安全问题,但是消耗内存)
public class Singleton{
private static Singleton single=new Singleton();
public static Singleton getInstance(){
return single;
}
}
懒汉式单例线程不安全
public class Singleton{
private static Singleton instance;
private Singleton{}
public static Singleton getInstance(){
if(instance==null){ //线程不安全,如果线程A,B同时在这里进行了判断
instance=new Singleton(); //A,B同时new
}
return instance;
}
}
双重检测锁(懒汉式的基础上进行改造)
public class Singleton{
private volatile static Singleton instance;
private Singleton{}
publict static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=new Singleton();//出现指令重排会返回一个未初始化的对象,所以需要volatile修饰instance
}
}
}
return instance;
}
}