Java内存模型之单例模式DCL volatile的使用
public class Test {
/**
* 1.保持了可见性
* 2.不保持原子性
* 3.禁止指令重排
* volatile
**/
private volatile static Singleton singleton;
//注意 必须私有
private Test(){}
//synchronized 不要放在方法上影响性能
public static Singleton newInstance() {
//首先判断一下是否是空 如果第二次进来 队形存在直接返回即可
if (singleton == null) {
//然后在加锁创建对象
synchronized (Test.class) {
if (singleton == null) {
return new Singleton();
}
}
}
return singleton;
}
// volatile禁止指令重排
// 实例化一个分为三步 1.分配对象空间 2.初始化对象 3.将内存空间的地址赋值给对应的引用
// 如果不使用volatile(我累tei的) 修饰词可能会出现流程执行顺序有问题
}