设计模式实现 - 单例模式

单线程单例模式通常分为两种

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;
    }
}

单例适用于工具类对象,避免频繁创建/销毁对象。

posted @ 2019-03-28 15:15  森淼clover  阅读(89)  评论(0编辑  收藏  举报