采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
看解释是因为 A a=new A()这个语句会编译成多个指令,然后指令重排可能会让a引用不为空,但是未初始化。我的疑问是synchronized关键字不是保证了原子性吗,那我理解即使编译成多个指令,释放锁的时候a要么完全创建完成,要么未被创建。别的线程怎么会得到一个a的中间态,引用不为空但是未初始化呢。
同学你好,双重检测的外层检测是没有被上锁的,线程1执行到中间态的时候,线程2不必等锁释放,在外层检测中就能直接拿到引用了,建议配合视频8分30秒左右的代码和讲解再理解一下。
登录后可查看更多问答,登录/注册
Android面试全攻略
475 4
596 3
348 3
704 3
384 3