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