java 设计模式 —— 浅析单例模式
2017-03-03 10:22
232 查看
饿汉模式
懒汉模式
Double Check Lock
静态内部类
推荐:
静态内部类优先
优点:线程安全,
缺点:为什么叫饿汉模式?因为在
优点:线程安全,且需要对象时才实例化对象
缺点:每次获取对象都要同步,耗时
优点:线程安全,需要时才初始化对象
缺点:由于 Java 内存模型的原因可能会加载失败,虽然概率很小,故推荐在实例对象前加上
优点:线程安全,延迟加载
懒汉模式
Double Check Lock
静态内部类
推荐:
静态内部类优先
饿汉模式
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton {} public static Singleton getInstance() { return instance; } }
优点:线程安全,
final关键字确保实例在初始化后不会再被改变
缺点:为什么叫饿汉模式?因为在
final static关键字确保类加载的同时就已经创建好了实例,而并不是我们需要的时候再来创建,可能会有些浪费资源。
懒汉模式
public class Singleton { private static Singleton instance; private Singleton {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
优点:线程安全,且需要对象时才实例化对象
缺点:每次获取对象都要同步,耗时
Double Check Lock
public class Singleton { private static Singleton instance = null; private Singleton {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
优点:线程安全,需要时才初始化对象
缺点:由于 Java 内存模型的原因可能会加载失败,虽然概率很小,故推荐在实例对象前加上
volatile关键字,即
private static volatile Singleton instance
静态内部类
public class Singleton { private Singleton {} public static Singleton getInstance() { return SingletonHolder.instance; } private static class SingletonHolder{ private static final Singleton instance = new Singleton(); } }
优点:线程安全,延迟加载
相关文章推荐
- 浅析JAVA设计模式之代理模式(二)
- 浅析JAVA设计模式之代理模式(七)
- Java设计模式之浅析命令模式
- 浅析Java设计模式中的单例模式
- java 设计模式 —— 浅析状态模式
- 浅析JAVA设计模式之代理模式(三)
- java 设计模式浅析(持续学习更新)
- java设计模式——装饰者模式浅析
- 浅析JAVA设计模式(三)
- 浅析JAVA设计模式之工厂模式(二)
- 浅析JAVA设计模式之代理模式(五)
- 浅析JAVA设计模式之单例模式(一)
- 浅析JAVA设计模式之工厂模式(二)
- 浅析JAVA设计模式之工厂模式(一)
- 浅析Java IO 设计模式之—装饰器模式
- 浅析JAVA设计模式之代理模式(六)
- java 23种设计模式浅析
- 浅析JAVA设计模式之工厂模式(三)
- java 设计模式 —— 浅析代理模式
- 浅析Java设计模式 - 单例模式