从源码学习单例模式

单例模式

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

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

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

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

相关推荐
_dindong1 天前
Linux网络编程:Socket编程TCP
linux·服务器·网络·笔记·学习·tcp/ip
金士顿1 天前
ethercat网络拓扑详细学习
学习
知识分享小能手1 天前
uni-app 入门学习教程,从入门到精通,uni-app组件 —— 知识点详解与实战案例(4)
前端·javascript·学习·微信小程序·小程序·前端框架·uni-app
wahkim1 天前
Flutter 学习资源及视频
学习
小白要努力sgy1 天前
待学习--中间件
学习·中间件
~无忧花开~1 天前
CSS学习笔记(五):CSS媒体查询入门指南
开发语言·前端·css·学习·媒体
吴鹰飞侠1 天前
AJAX的学习
前端·学习·ajax
我的xiaodoujiao1 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 19--测试框架Pytest基础 3--前后置操作应用
python·学习·测试工具·pytest
lzj_pxxw1 天前
嵌入式开发技巧:舍弃标志位,用宏定义函数实现程序单次运行
笔记·stm32·单片机·嵌入式硬件·学习
江苏世纪龙科技1 天前
【世纪龙科技】新能源汽车动力电池拆装与检测虚拟实训软件介绍
学习