双重检查

双重检查应用实例

代码演示:

class Singleton{
    private static volatile Singleton singleton;
    private Singleton(){}


 // 提供一个静态公有方法
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
            // 同步代码,效率是比较低的
            // 只是在判断外就走过了
        }
        return instance;
    }
}

Java并发编程:volatile关键字解析

优缺点说明

  1. double-check 概念是多线程开发中常使用到的,如代码中所示,我们进行了两次 if(singleton == null)检查,这样就可以保证线程安全了

  2. 这样,实例化代码只用执行一次,后面再次访问时候,判断if(singleton==null), 直接return实例化对象,也避免的反复进行方法同步.

  3. 线程安全;延迟加载;效率较高

  4. 结论:在实际开发中,推荐 使用这种单例设计模式


results matching ""

    No results matching ""