请稍等 ...
×

采纳答案成功!

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

volatile在DCL中的应用

图片描述

老师,这种情况,如果构造方法里面没有其他操作,是不是不加volatile也可以呢?不会涉及到重排序的问题

正在回答

插入代码

1回答

构造方法里面就算你什么都没写,但也是有构造的,如果不加volatile,一样会导致开两块内存构造两次对象,就不是单例啦。

另外,如果你的类有很多成员,即便你不在构造里面写任何代码,这些成员的初始化操作也会做为构造的一部分的~

1 回复 有任何疑惑可以回复我~
  • 提问者 慕雪3000668 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-03-28 23:10:01
  • 提问者 慕雪3000668 #2
    首先,对象的初始化操作本身就不是原子性操作。所以可能引用拿到了,但是还没初始化完成。
    给instance加上volatile的话,保证给instance赋值前的操作都要执行完才会赋值,这样来禁止重排序。
    是这样吗老师?
    回复 有任何疑惑可以回复我~ 2019-03-28 23:48:41
  • bennyhuo 回复 提问者 慕雪3000668 #3
    没错~
    回复 有任何疑惑可以回复我~ 2019-03-29 01:15:16
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号