在双重检查锁模式中为什么需要使⽤ volatile 关键字?

在java内存模型中,volatile 关键字作⽤可以是保证可见性或者禁⽌指令重排。这⾥是因为 singleton = new Singleton() ,它并⾮是⼀个原⼦

操作,事实上,在 JVM 中上述语句⾄少做了以下这 3 件事:

第⼀步是给 singleton 分配内存空间;

第⼆步开始调⽤ Singleton 的构造函数等,来初始化 singleton;

第三步,将 singleton 对象指向分配的内存空间(执⾏完这步 singleton 就不是 null 了)。

这⾥需要留意⼀下 1-2-3 的顺序,因为存在指令重排序的优化,也就是说第 2 步和第 3 步的顺序是不能保证的,最终的执⾏顺序,可能是 1-

2-3,也有可能是 1-3-2。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容