(九)单例模式的几种实现方式

参考链接:https://www.runoob.com/design-pattern/singleton-pattern.html

一、懒汉式(线程不安全)

懒汉的意思就是我不生成实例,到使用时才生成第一个实例。

实现简单,但因为取唯一实例时未加锁,因此不支持多线程。

public clsaa Singleton{
    private static Singleton instance;
    private Singleton();
    
    public static Singleton getInstance(){
        if(instance == null)
            instance = new  Singleton();
        return instance;
    }
}

二、懒汉式(线程安全)

对getInstance函数进行加锁。但此方法效率低下,因为常见情况下都不需要同步。

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

三、饿汉式

在调用获取实例函数前就将实例初始化了,不会出现懒汉式中生成多个实例的情况,因此是线程安全的。

public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}

四、双重检测锁

多线程下安全且能保持高性能

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

为什么进行了双重检测?

参考链接:https://www.cnblogs.com/xz816111/p/8470048.html

五、登记式/静态内部类

相当于对饿汉式的改进,饿汉式在类加载时就创建对象。在类内部建一个静态的私有成员类,负责维护唯一的对象。这里登记式实现方法即通过MAP或list将类保存起来,静态内部类实现方法就是通过静态私有成员维护。

public class SingletonClass {
    private static class SingletonHolde {
        private static SingletonClass singletonClass = new SingletonClass();
    }


    private SingletonClass() {
    }

  
    public static SingletonClass getInstance() {
       
        return SingletonHolde.singletonClass;
    }
}
————————————————
版权声明:本文为CSDN博主「刘知昊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shu15121856/article/details/81434269

六、枚举

参考本链接:https://blog.csdn.net/shu15121856/article/details/81434269

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值