单例设计模式

单例设计模式,第1张

单例设计模式

//单例设计模式
//懒汉式
//优点: 第一步调用会初始化。避免内衬浪费
//缺点:必须加锁才能保证单例, 加锁会影响效率

public class Singleton{

    private static Singleton instance;

    //私有化构造方法
    private Singleton(){}
    //线程安全
    public static synchronized Singleton getInstance(){
        if (instance==null){
            instance = new Singleton();
        }
        return instance;
    }
}

//饿汉式
//优点:没有加锁,效率高
//缺点:类加载是就初始化,浪费内存
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;

    }
}

//双检锁/双重校验锁
//线程 安全 多线程情况下保持高性能
//volatile的作用:提高效率,可以解决加锁后多个线程需要判断锁,浪费资源
public class Singleton{
    private volatile static Singleton singleton;

    private Singleton(){}
    public static Singleton getSingleton(){
        if (singleton ==null){
            synchronized (Singleton.class){
                if (singleton==null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }

}


//静态内部类
//线程安全
//这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用。
public class Singleton{
    private static class SingletonHolder{
        private static final Singleton  INSTANCE = new Singleton();
    }
    private Singleton(){}
    public static final Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }

}

//枚举
//线程安全
//优点:简洁,自动支付序列化机制,防止多次实例化
public enum Singleton{
    INSTANCK;
    public void singletonMethod(){}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5523566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存