请稍等 ...
×

采纳答案成功!

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

关于双重检测加volatile关键字的疑问

看解释是因为 A a=new A()这个语句会编译成多个指令,然后指令重排可能会让a引用不为空,但是未初始化。我的疑问是synchronized关键字不是保证了原子性吗,那我理解即使编译成多个指令,释放锁的时候a要么完全创建完成,要么未被创建。别的线程怎么会得到一个a的中间态,引用不为空但是未初始化呢。

正在回答 回答被采纳积分+3

1回答

Vincent文森 2022-03-10 18:54:03

同学你好,双重检测的外层检测是没有被上锁的,线程1执行到中间态的时候,线程2不必等锁释放,在外层检测中就能直接拿到引用了,建议配合视频8分30秒左右的代码和讲解再理解一下。

2 回复 有任何疑惑可以回复我~

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信