从源码学习单例模式

单例模式

单例模式是一种设计模式,常用于确保一个类只有一个实例,并提供一个全局访问点。这意味着无论在程序的哪个地方,只能创建一个该类的实例,而不会出现多个相同实例的情况。

在单例模式中,常用的实现方式包括懒汉式和饿汉式:

  1. 懒汉式:在第一次调用获取实例的方法时才创建实例,实现简单但在多线程环境下需要考虑线程安全性。

  2. 饿汉式:在类加载时就创建实例,保证了线程安全,但可能会造成资源浪费。

饿汉式单例模式

饿汉式单例模式是一种在类加载时就创建实例的单例模式。

在该模式中,实例被静态初始化,因此在程序运行时实例已经存在,不需要在获取实例时进行额外的判断和同步操作,从而保证了线程安全性。这样的实现方式简单直接,适用于大多数情况。

下面是一个典型的饿汉式单例模式的Java示例:

复制代码
public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
        // 私有构造方法,防止外部实例化
    }

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

在这个示例中,Singleton类中的instance实例在类加载时就被创建,因为它是静态的,并且是final类型的,确保了线程安全,即使在多线程环境下也不会出现多个实例的情况。

例如上述代码,实现了一个简单的饿汉式单例模式,通过静态内部类和静态变量的方式,确保在Java应用中只有一个 Factory 实例存在,并提供了静态方法 getFactory() 来获取该实例。

饿汉式单例适场景

  1. 单例对象较小:如果单例对象的初始化和占用的资源比较小,可以在程序启动时就创建实例,避免在后续使用过程中频繁创建和销毁对象,提高性能。

  2. 线程安全要求高:在需要保证线程安全的情况下,饿汉式单例模式是一个很好的选择,因为它在类加载时就创建实例,不需要进行额外的同步操作,避免了线程安全问题。

  3. 对象初始化较简单:如果单例对象的初始化比较简单,并且不依赖于外部参数或环境,饿汉式单例模式是一个合适的选择,可以在类加载时完成初始化。

总的来说,饿汉式单例模式适用于对资源消耗较小、线程安全要求高以及对象初始化简单的情况。它提供了一种简单、线程安全的单例实现方式,适用于大多数情况。

相关推荐
SH11HF16 分钟前
小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
学习·云计算
Frank学习路上32 分钟前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
Chef_Chen2 小时前
从0开始学习计算机视觉--Day07--神经网络
神经网络·学习·计算机视觉
X_StarX4 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生
MingYue_SSS4 小时前
开关电源抄板学习
经验分享·笔记·嵌入式硬件·学习
weixin_437398214 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
慕y2745 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
peace..5 小时前
温湿度变送器与电脑进行485通讯连接并显示在触摸屏中(mcgs)
经验分享·学习·其他
软件黑马王子6 小时前
C#系统学习第八章——字符串
开发语言·学习·c#
strongwyy8 小时前
蓝牙墨水屏上位机学习(2)
学习