奇瑞艾瑞泽7挂档杆的档头?java 单例模式中双重检查锁定 volatile 的作用

发表时间:2018-02-13 08:00:03 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《不可拆卸电池的手机电池出问题了咋修?电脑主机总响 敲一下又好了 没一会又开始响 该咋办10》相关知识。本篇中小编将再为您讲解标题奇瑞艾瑞泽7挂档杆的档头?java 单例模式中双重检查锁定 volatile 的作用。

看手动自动了,自动档逆时针旋转即可,自手动挡需要将单位上边的盖拆掉就行

谢邀请,

非专业维修人员,无法给你解答,

谢谢邀请回答。万能的度娘会帮助你的

逆时针旋转就对了

钢锯

看题目描述,其实题主已经清楚了volatile的禁止指令重排序、保证内存可见性的作用。只是想知道在单例模式的双重检查锁定中volatile的作用而已。

个人观点是,两种作用都有:

volatile对singleton的创建过程的重要性:

禁止指令重排序(有序性)

实例化①个对象其实可以分为③个步骤:

  (①)分配内存空间。

  (②)初始化对象。

  (③)将内存空间的地址赋值给对应的引用。

但是由于操作系统可以对指令进行重排序,所以上面的过程也可能会变成如下过程:

  (①)分配内存空间。

  (②)将内存空间的地址赋值给对应的引用。

  (③)初始化对象

如果是这个流程,多线程环境下就可能将①个未初始化的对象引用暴露出来,从而导致不可预料的结果(如题目的描述,这里就是因为 instance = new Singleton(); 不是原子操作,编译器存在指令重排,从而存在线程① 创建实例后(初始化未完成),线程② 判断对象不为空后对其操作,但实际对象仍为空,造成错误)。因此,为了防止这个过程的重排序,我们需要将变量设置为volatile类型的变量,volatile的禁止重排序保证了操作的有序性。

Singleton对象的内存可见性

这里由于synchronized锁的是Singleton.class对象,而不是Singleton对象,所以synchronized只能保证Singleton.class对象的内存可见性,但并不能保证Singleton对象的内存可见性;这里用volatile声明Singleton,可以保证Singleton对象的内存可见性。这①点作用也是非常重要的(如题目的描述,避免因为线程① 创建实例后还只存在自己线程的工作内存,未更新到主存。线程 ② 判断对象为空,创建实例,从而存在多实例错误)。

编后语:关于《奇瑞艾瑞泽7挂档杆的档头?java 单例模式中双重检查锁定 volatile 的作用》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《咋做才能彻底消除车内噪音?求英特尔 4 ich7 family 芯片组 驱动》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题