双重检查的单例模式为啥需要使用volatile
2018-10-13,本文 270 字,阅读全文约需 1 分钟
首先是双重检查单例模式的代码
需要先了解(直接在本博客搜索可以找到相应文章)
- synchronized 原理
- volatile 原理
对象的初始化
singleClass = new SingleClass();
下面这三步是一个对象的初始化过程
1 memory=allocate();// 分配内存 相当于c的malloc
2 ctorInstanc(memory) //初始化对象
3 s=memory //设置s指向刚分配的地址
不用volatile修饰有可能出现123、132,导致其他线程取到的是未初始化完成的对象
总结:
加上volatile就是为了防止产生指令的重排序问题