单例模式复习

单例模式作为设计模式之一,有饿汉式单例,懒汉式单例,静态内部类式单例,枚举式,检测双重锁单例
这里写的是双重锁单例

public class SingletionDCL{
    private volatile static SingletionDCL mInstance;
    private SingletionDCL(){}
    public static SingletionDCL getmInstance(){
        if (mInstance == null) {
            synchronize(SingletionDCL.class){
                if (mInstance == null) {
                    mInstance = new SingletionDCL();
                }
            }
        }
        return mInstance;
    }
}

如果不加volatile关键字会造成什么问题

为什么要加volatile呢,因为在

mInstance = new SingletionDCL();

这句话中,这段代码是分三步进行的
1.为mInstance申请内存空间
2.初始化mInstance
3.讲mInstance指向分配的内存地址
JVM又有指令重排的特性,顺序有可能就是1->3->2的顺序,在单线程没什么问题,但是在多线程的话,就会发生一个线程获得还没初始化的实例,比如线程A执行了1,3步,这个时候线程B来执行getmInstance方法,就会获得一个没初始化的mInstance。而volitate关键字可以禁止jvm的指令重排,这样子就可以保证在多线程环境下执行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 单例模式: 概念: 就是确保某个类只有一个实例,并且只能自行实例化,向整个系统提供访问该唯一实例的方法。注意: ...
    scanf逗比a阅读 90评论 0 0
  • 一、前言 单例模式是应用最广的设计模式之一,在使用这个模式时,单例对象的类必须保证只有一个实例存在,许多时候整个系...
    南小夕阅读 272评论 0 1
  • 文章转载自公众号秉心说,作者 秉心说 枚举很适合用来实现单例模式。实际上,在 Effective Java 中也提...
    java经验总结阅读 286评论 0 2
  • 什么是设计模式? 是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。一些开发的套路,用于解决某一些特...
    Spring618阅读 708评论 0 0
  • 一直想整理一下关于andorid设计模式的文章,也方便自己需要的时候回顾下,由于有些地方也没弄明白,所以有些地方可...
    BigBigArvin阅读 597评论 1 5

友情链接更多精彩内容