设计模式实现 - 单例模式
单线程单例模式通常分为两种
1)饿汉模式:声明变量/构造函数时实例化。快,但是如果没有用到这个类,会出现资源浪费
2)懒汉模式:在getInstance()内初始化。
优化
为了优化饿汉模式,减少资源浪费,可以使用静态内部类
public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonInstance.INSTANCE; } }
多线程下使用懒汉模式通常会出现重复实例化对象的错误,需要进行优化
1)syncronized method 同步方法。效率低而且没必要
2)syncronized code 同步代码块。若==null内部添加同步关键词。**注意需要添加两个判断句,如果sync内部没有if判断,可能会出现多个线程同时进入if语句的问题(因为if判断并不同步)
public class Singleton { private static volatile Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
单例适用于工具类对象,避免频繁创建/销毁对象。