参见Synchronized 底层原理 Volatile 底层原理

volatile与锁的比较

volatile 可以认为是轻量级的锁(Hotspot中使用了lock指令),解决了可见性、有序性两个问题。
相同点
1. 确保变量的内存可见性
2. 防止指令重排序
不同点
1.volatile可以确保对变量写操作的原子性,但不具备**排他性
2.使用锁可能会导致线程的上下文切换(内核态与用户态之间的切换),但
使用volatile并不会出现上下文切换** :::tips

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