请写出多线程安全单例模式
答:
1.第一种最优方法
public class Singleton{
private static class SingletonHolder {
public final static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
2第二种方法,双重检查锁(Double-Checked Lock)
public class doubleCheck{
private volatile static Instance instance;
public static Instance getInstance(){
if(instance==null){ //1
synchronized (doubleCheck.class){
if(instance==null){
instance = new Instance();
}
}
return instance;
}
}
补充:
这是新提出一种新的模式——Initialization on Demand Holder. 这种方法使用内部类来做到延迟加载对象,在初始化这个内部类的时候,JLS(Java Language Sepcification)会保证这个类的线程安全,完全使用了Java虚拟机的机制进行同步保证,没有一个同步的关键字Synchronized,提高了效率。