线程可见性
导致共享变量在线程间不可见的原因:
1:线程交叉执行:
2:重排序结婚线程交叉执行
3:共享变量更新后值没有在工作内存和主存间即时更新
JMM 关于synchronized的两条规定:
1 线程解锁钱,必须把共享变量的最新值写到主内存
2:线程加锁时,将清空工作内存中的变量值,从而使用共享变量时需要从主内存中重新读取最新值(加锁解锁是同一把锁)
可见性 - volatile
对volatile变量写操作时,会在写操作后加入一条store屏障,将本地内存中的共享变量值刷新到主存
对volatile读操作时,会在读前面加入一条load屏障指令,从主内存中读取共享变量
volatile 使用情况
1 对变量的写不依赖当前值
2 适合状态标记量