双重检查
双重检查应用实例
代码演示:
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;
}
}
优缺点说明
double-check 概念是多线程开发中常使用到的,如代码中所示,我们进行了两次
if(singleton == null)
检查,这样就可以保证线程安全了这样,实例化代码只用执行一次,后面再次访问时候,判断
if(singleton==null)
, 直接return实例化对象,也避免的反复进行方法同步.线程安全;延迟加载;效率较高
结论:在实际开发中,推荐 使用这种单例设计模式