从源码学习单例模式

单例模式

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

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

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

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

相关推荐
T***u3331 小时前
后端缓存技术学习,Redis实战案例
redis·学习·缓存
Gorgous—l2 小时前
数据结构算法学习:LeetCode热题100-图论篇(岛屿数量、腐烂的橘子、课程表、实现 Trie (前缀树))
数据结构·学习·算法
im_AMBER2 小时前
算法笔记 13 BFS | 图
笔记·学习·算法·广度优先
烤麻辣烫2 小时前
黑马程序员苍穹外卖(新手) DAY3
java·开发语言·spring boot·学习·intellij-idea
驯狼小羊羔3 小时前
学习随笔-hooks和mixins
前端·javascript·vue.js·学习·hooks·mixins
组合缺一3 小时前
Solon AI 开发学习 - 1导引
java·人工智能·学习·ai·openai·solon
brave and determined3 小时前
可编程逻辑器件学习(day24):异构计算:突破算力瓶颈的未来之路
人工智能·嵌入式硬件·深度学习·学习·算法·fpga·asic
mucheni5 小时前
迅为RK3568开发板OpeHarmony学习开发手册-修改应用程序名称
linux·前端·学习
YJlio5 小时前
进程和诊断工具学习笔记(8.19):Hyper-V 来宾调试与符号配置 —— 在虚拟化场景下用 LiveKd 抓现场
网络·笔记·学习
冻感糕人~6 小时前
Agent框架协议“三部曲”:MCP、A2A与AG-UI的协同演进
java·人工智能·学习·语言模型·大模型·agent·大模型学习