设计模式-单例模式

饿汉式:

class Ehan{
    private Ehan(){}
    private static Ehan singleton = new Ehan();
    public static Ehan getInstance(){
        return singleton;
    }
}

关于饿汉式单例模式,不存在有多个实例被创建的风险。因为该类只有唯一的一次实例化操作,就是在类加载的时候初始化对象。

懒汉式:

  双检查:

  

class Baohan{
    private Baohan(){}
    private volatile static Baohan singleton;
    public static Baohan getInstance(){
        if(singleton == null){
            synchronized (Baohan.class){
                if(singleton == null){
                    singleton = new Baohan();
                }
            }
        }
        return singleton;
    }
}

关于懒汉式单例模式,只有被调用的时候才会去实例化对象,属于延迟加载。并且为了保证在多线程环境中不会出现多个对象的问题,在方法里面使用synchronized加锁,并且变量使用volatile关键字来修饰,从而避免了指令重排序导致实例化不完整的问题。还有一种方法是使用内部静态类。

参考链接:https://blog.csdn.net/justloveyou_/article/details/64127789

猜你喜欢

转载自www.cnblogs.com/zhangxz135/p/8982640.html