如在多线程的情况下,单例模式就不安全了 。
为了解决这个问题,JMM允许编译器在生成指令顺序的时候,可以插入特定类型的内存屏障来禁止指令重排序 。
当一个变量使用volatile修饰的时候,volatile关键字就是内存屏障 。当编译器在生成指令顺序的时候,发现了volatile,就直接忽略掉 。不再重排序了 。
示意图:
文章插图
【Java并发编程之验证volatile指令重排-理论篇】
推荐阅读
- 麻省理工女学姐推荐:这是当下最好的Java学习教程了!免费分享
- Java自动化办公OA管理系统源码
- 如何应对高并发
- c使用的几个高级编程技巧
- Java 8 的 Stream API 这么牛X,性能如何呢?
- 编程到底难不难学?新手入门选择哪种语言好?
- 技术编程人员成长的 9 个段位
- Java程序员只会CRUD连Spring事务传播机制都不懂?
- 伟大创业想法,只差一人编程?全网最全的开源软件了解一下
- JAVA技术总监:技术团队管理的6大坑