Volatile
可见性和有序性(禁重排)
写后读
内存屏障(重点)
没有原子性
加载计算赋值----非原子操作---写丢失问题
指令禁重排:存在依赖关系,禁止重排序
面试题
1.可见性:对于一个被volatile修饰的变量,写操作,这个变量的最新值会立即刷新回主内存中
读操作,总是可以读取这个变量的最新值,也就是这个变量最后被修改的值
2.没有原子性
3.禁重排
4.内存屏障:他使得CPU或者编译器对屏障指令的 前 后 的内存操作 进行排序约束
阻止屏障两边的指令进行重新排序
写加入屏障,强制将线程私有工作区内存的数据刷回主内存
读加入屏障,线程私有工作区的内存数据失效,重新到主内存中获取最新数据
5.volatile写之前的操作,都禁止重排序到volatile之后
volatile读之后的操作,都禁止重排序到volatile之前
volatile写之后volatile读,禁止重排序
以上,内存屏障不好理解!