/**
* 双重检索的饿汉式单例
* 步骤:1、声明私有静态变量
* 2、私有构造器(目的是防止外部new)
* 3、提供一个公有的静态方法
*/
public class LazySingleTon {
//使用volatile的原因是:防止指令重排
private volatile static LazySingleTon instance;
private LazySingleTon(){
}
/**
* new的执行过程:1、开辟空间;2、初始化空间;3、赋值
* 使用双重检索的目的是为了实现线程安全
* 对象只有经过上述三个步骤后才算创建,使用volatile的目的可以防止指令重排
* 保证在多线程的情况下,仍是单例模式
* @return
*/
public static LazySingleTon getInstance(){
if(instance==null){
synchronized(LazySingleTon.class) {
if(instance==null){
return new LazySingleTon();
}
}
}
return instance;
}
}