volatile关键字实现原理
1、volatile关键字的语义分析
作用:让其他线程能够马上感知到某个线程多某个变量的修改
- 保证可见性
对共享变量的修改,其他线程能够马上感知到 - 保证有序性
在重排序时保证volatile修饰的代码位置不变 实现原理
对于volatile修饰的变量会编译时会使用Lock指令,其他线程用到Lock指令修饰的变量时会从主存中直接获取2、 volatile的使用场景
- 状态标志(开关模式)
一个线程通过改变共享变量的值,来控制另一个现实的结束 - 双重检查锁定(double-checked-locking) DCL
懒汉式单例 需要利用顺序性
3、volatile和synchronized的区别
- 使用上
volatile修饰变量,synchronized修饰方法和语句块 - 对原子性的保证
synchronized保证了原子性,volatile不能保证原子性 - 可见性的保证
都可以保证,但原理不同
volatile对变量加lock,synchronized使用monitorEnter和monitorExit - 对有序性的保证
volatile禁止了重排序,保证了有序性
sychronized是通过加重量级锁将并行退化成串行,容易引起阻塞