美文网首页想法哲思散文
单例的DCL方式下,那个单例的私有变量要不要加volatile关

单例的DCL方式下,那个单例的私有变量要不要加volatile关

作者: 半称心x度 | 来源:发表于2019-12-29 20:23 被阅读0次

单例的DCL方式下,那个单例的私有变量要不要加volatile关键字

答案解析:需要,new某个对象,可以分解为:

1 memory=allocate();// 分配内存 相当于c的malloc

2 ctorInstanc(memory) //初始化对象

3 instance=memory //设置instance指向刚分配的地址

在编译器运行时,可能会出现重排序 从1-2-3 排序为1-3-2

如此在多线程下就会出现问题例如现在有2个线程A,B

线程A在执行第5行代码时,B线程进来,而此时A执行了 1和3,没有执行2,

此时B线程判断instance不为null 直接返回一个未初始化的对象,就会出现问题

而用了volatile,上面的重排序就会在多线程环境中禁止,不会出现上述问题。

相关文章

  • 单例的DCL方式下,那个单例的私有变量要不要加volatile关

    单例的DCL方式下,那个单例的私有变量要不要加volatile关键字 答案解析:需要,new某个对象,可以分解为:...

  • 单例模式注意事项

    单例中的类变量定义加 volatile : 禁止java指令重排序

  • 单例模式

    一 单例模式的实现方式 DCL双重判定模式(instance 需要设定为 volatile,保证各个线程判断是否存...

  • Picasso流程

    Picasso Picasso的入口是get方法,是个dcl + volatile 的单例 PicassoProv...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

  • Java知识点总结基础篇之单例

    二十五、单例 单例就是该类只能返回一个实例。 单例所具备的特点: 1.私有化的构造函数 2.私有的静态的全局变量 ...

  • 常用的设计模式

    单例模式:Singleton 单例:静态变量,私有构造器,静态方法 分类: 懒汉单例 :在第一次调用的时候实例化自...

  • 单例模式

    单例模式的实现方式: 构造函数私有 通过静态方法或枚举返回对象 多线程环境下也要保证单例对象只有一个 单例对象在反...

  • DCL单例为什么要加Volatile

    拿一个对象创建赋值来说 上段代码转换成汇编码为: 从汇编码中可以看出,0行为对象开辟了一个内存空间,该内存的成员区...

网友评论

    本文标题:单例的DCL方式下,那个单例的私有变量要不要加volatile关

    本文链接:https://www.haomeiwen.com/subject/ltruoctx.html