请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

volatile怎样做到防止类初始化时jvm重排序?

volatile的本质是每次涉及到变量读写的时候都把变量值在工作内存和主内存之间进行同步。单例初始化的时候,1.分配对象内存空间 memory = allocate(); 2.初始化对象 ctorInstance(); 3.设置对象实例指向刚刚分配的内存 instance = memory; 这三步是怎样通过volatile特性达到不重排序的?

正在回答

1回答

你好,当有volatile时,就会限制这里的重排序,这是jmm里约定的,并由jdk来保证的,本质上是volatile修饰的变量对应的读写操作在生成cpu指令时不允许编译器进行重排序,这是和其他变量的区别,除了限制重排序之外,还会额外插入内存屏障,来保证可见性。

1 回复 有任何疑惑可以回复我~
  • 提问者 _庆城 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-09-24 01:02:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信