单例模式简单理解

单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式的核心思想是控制对象的创建过程,使得类的实例在程序运行期间始终保持唯一性

单例模式分类:懒汉式、饿汉式、双重校验锁、静态内部类、枚举

1、懒汉式(线程安全)

优点:线程安全。
缺点:每次调用getInstance()都会同步,效率较低。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

2、饿汉式(线程安全)

饿汉式单例模式在类加载时就初始化实例,简单且线程安全

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

优点:线程安全,实现简单。
缺点:实例在类加载时就初始化,可能会浪费资源(如果实例化成本高且不常用)。

3、双重校验锁式

双重校验锁是一种高效的单例实现方式,适用于懒汉式初始化。

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) { // 第一次检查
            synchronized (Singleton.class) { // 同步代码块
                if (instance == null) { // 第二次检查
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

优点:线程安全,且只在第一次初始化时同步,效率较高。
关键volatile关键字确保instance的可见性和禁止指令重排序。

4、静态内部类

静态内部类是一种优雅且高效的单例实现方式。

public class Singleton {
    private Singleton() {}

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

优点:线程安全,延迟加载,实现简单。
原理:利用Java的类加载机制,SingletonHolder类在第一次调用getInstance()时才会被加载,从而初始化INSTANCE

5、枚举实现

枚举实现是一种天然线程安全的单例实现方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值