单例模式-DCL

Posted 红兔哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式-DCL相关的知识,希望对你有一定的参考价值。

铁子们有段时间没有更新了,最近忙着准备面试,准备过程中发现自己还需要积累的实在是太多太多,每每学到新东西的感觉真是美妙而又动力十足啊,继续伸直腰杆、努力前进

单例模式-DCL

双重检查判断,使用volatile关键字禁止指令重排,在多线程情况下创建安全的单例对象,直接上代码

public class Instance {

    /**
     * volatile 禁止指令重排,按照代码执行顺序先赋值后创建对象
     */
    private volatile static Instance instance;

    private String instName;

    private Instance() {
        instName = "DCL";
    }

    public static Instance getInstance() {
        if (instance == null) {
            synchronized (Instance.class) {
                if (instance == null) {
                    instance = new Instance();
                }
            }
        }
        return instance;
    }
}

单例模式-内部类

使用内部类构造单例对象,JVM保证单例

public class Instance {

    private static class InstanceObj {
        private static final Instance INSTANCE = new Instance();
    }

    public static Instance getInstance() {
        return InstanceObj.INSTANCE;
    }
}

以上是关于单例模式-DCL的主要内容,如果未能解决你的问题,请参考以下文章

DCL 单例模式是否需要volatile?

DCL单例模式你不知道的秘密

DCL_单例模式

DCL单例模式浅析

Java枚举单例模式比DCL和静态单例要好?

单例模式双重检查(DCL)引发的多线程问题