原理
volatile的底层实现原理是内存屏障
- 对volatile变量的写指令后加入写屏障
- 对volatile变量的读指令前会加入读屏障
保证可见性

保证有序性

不能解决指令交错
- 写屏障仅仅只能保证之后的读能够读到最新的结果,但是不能保证读跑到它前面去
- 而有序性也只是保证了本线程内相关代码不被重排序
double-checked locking单例模式
实现特点:
- 懒惰初始化,用到时才创建
- 首次使用getInstance()才使用synchronized加锁,后续使用时无需加锁
- 有隐含的关键点:第一个if使用了instance变量,实在同步代码块之外,但在多线程的环境下,会存在指令重排序的问题
创建实例对象对应字节码:



double-checked locking解决


