单例模式-懒汉式-双重检查(安全)

/**
 * 单例模式 懒汉式(安全)
 */
class Singleton {
    // 1.声明一个私有变量
    // 2.使用volatile关键字,使变量在多个线程可见性
    private static volatile Singleton singleton;

    // 2.私有化构造函数(防止被人可以new对象出来)
    private Singleton(){};

    // 3.对外暴漏获取对象的方法
    public static Singleton getInstance(){
        //如果对象为空,则创建。不为空,则返回
        if(singleton == null){
            // 4.加入同步代码块
            synchronized (Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                 }
            }

        }
        return singleton;
    }
}


public class Test {
    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance1 == instance2);//结果应该是true
        System.out.println(instance1.hashCode() == instance2.hashCode());
    }
}

优点:既是线程安全的,也解决了效率低,同时它是懒汉式的,避免了资源浪费。

你可能感兴趣的:(设计模式)