双重检查的单例模式为啥需要使用volatile

首先是双重检查单例模式的代码

需要先了解(直接在本博客搜索可以找到相应文章)

对象的初始化
singleClass = new SingleClass();

下面这三步是一个对象的初始化过程
1 memory=allocate();// 分配内存 相当于c的malloc 2 ctorInstanc(memory) //初始化对象 3 s=memory //设置s指向刚分配的地址

不用volatile修饰有可能出现123、132,导致其他线程取到的是未初始化完成的对象

总结:
加上volatile就是为了防止产生指令的重排序问题

Blog

Dump

Project