volatile

297 阅读1分钟

原理

volatile的底层实现原理是内存屏障

  1. 对volatile变量的写指令后加入写屏障
  2. 对volatile变量的读指令前会加入读屏障

保证可见性

保证有序性

不能解决指令交错

  1. 写屏障仅仅只能保证之后的读能够读到最新的结果,但是不能保证读跑到它前面去
  2. 而有序性也只是保证了本线程内相关代码不被重排序

double-checked locking单例模式

实现特点:

  1. 懒惰初始化,用到时才创建
  2. 首次使用getInstance()才使用synchronized加锁,后续使用时无需加锁
  3. 有隐含的关键点:第一个if使用了instance变量,实在同步代码块之外,但在多线程的环境下,会存在指令重排序的问题
    创建实例对象对应字节码:

double-checked locking解决