大家好,这里是淇妙小屋,一个分享技术,分享生活的博主
后续会发布更多MySQL,Redis,并发,JVM,分布式等面试热点知识,以及Java学习路线,面试重点,职业规划,面经等相关博客
转载请标明出处!
volatile变量的修改对所有线程可见,体现在读,写两方面
某个线程在自己的本地内存中修改volatile变量,会立刻刷新到主内存中
某个线程如果想要读取volatile变量,JMM将该线程对应的本地内存设置为无效,该线程只能从主内存中获取
对volatile变量的单次读写操作具有原子性(JMM不保证64位数据double或long的读写操作具有原子性),对于 i++这种复合操作,仍然是没有原子性的
volatile只保证变量的单次读写具有原子性,复合操作就没有原子性了

编译器在生成字节码时,会插入 内存屏障来禁止指令冲排序


volatile只能在有限的一些情况下使用volatile变量代替锁
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。