单例模式双重校验解析
自我检测:
1.代码
2.volatile的作用
3.两个 instance==null 分别的作用
4.synchronized同步代码块内,获取类的三个方法
1.代码
public class Singleton{
private static volatile Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance = new Singleton();
}
}
}
return instance;
}
}
2.volatile的作用
防止Singleton指令重排序。
3.两个 instance==null 分别的作用
第一个:防止多个线程创建多个实例
第二个:防止多个线程同时进入第一个判断,创建第一个实例的线程释放锁后,其他线程获得锁再创建多余实例。
4.synchronized同步代码块内,获取类的方法
1)Singleton.class 2)instance.getClass 3)Class.forName("类路径的字符串,用'.'间隔")