当前位置: 首页 > news >正文

设计模式——单例模式(Singleton)

单例模式(Singleton Pattern)是设计模式中的一种,它确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在多种场景下都非常有用,比如配置文件的读取、数据库连接的创建、线程池的管理等。

实现单例模式的要点:

  1. 私有构造函数:防止其他类通过new关键字创建实例。
  2. 私有静态实例:在类内部定义一个静态的实例变量来保存类的唯一实例。
  3. 公共的静态方法:提供一个公共的静态方法来获取该类的唯一实例。

示例代码(Java):

public class Singleton {// 私有静态实例private static Singleton instance;// 私有构造函数private Singleton() {}// 公共的静态方法(也称为获取器或访问器)public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

注意:上述示例中的getInstance方法使用了synchronized关键字,这是为了保证在多线程环境下的线程安全。但是,这种实现方式在性能上可能不是最优的,因为每次调用getInstance方法时都需要进行同步。

改进的单例模式(双重检查锁定/双检锁):

public class Singleton {// 使用 volatile 关键字来确保 instance 在多线程中的可见性private volatile static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) { // 第一次检查synchronized (Singleton.class) {if (instance == null) { // 第二次检查instance = new Singleton();}}}return instance;}
}

在改进的版本中,我们使用了双重检查锁定(Double-Checked Locking, DCL)来减少同步的开销。同时,我们使用了volatile关键字来确保instance变量在多线程环境下的可见性。这是因为instance = new Singleton();这行代码并不是一个原子操作,它包含了三个步骤:分配内存、初始化对象、将instance指向分配的内存地址。如果没有volatile关键字,编译器可能会进行指令重排序,导致其他线程看到instance不为null,但是对象还没有被完全初始化的情况。

其他实现方式:

除了上述两种常见的实现方式外,还有使用枚举(Enum)、静态内部类等方式来实现单例模式。这些方式在某些场景下可能更加简洁、高效。

http://www.lryc.cn/news/342988.html

相关文章:

  • springboot3项目练习详细步骤(第二部分:文章分类模块)
  • VUE中父组件向子组件进行传值
  • alpine安装中文字体
  • JavaScript学习—JavaScript高级
  • CompletableFuture使用案例
  • 安卓使用so库
  • 【介绍下LeetCode的使用方法】
  • 重学java 30.API 1.String字符串
  • 【区块链】共识算法简介
  • Qt---day2-信号与槽
  • Python中设计注册登录代码
  • AI伦理和安全风险管理终极指南
  • golang testing使用
  • 在Excel中使用正则提取单元格内容
  • SQL查询语句(二)逻辑运算关键字
  • 矿山机械自动化中的激光雷达技术探索
  • MOSFET场效应管栅极驱动电流的计算
  • Python 爬虫:Spring Boot 反爬虫的成功案例
  • 计算机毕业设计Python+Vue.js天气预测系统 中国气象质量采集与可视化 天气数据分析 天气可视化 天气大数据 天气爬虫 大数据毕业设计
  • 【busybox记录】【shell指令】tr
  • Mac虚拟机软件哪个好用 mac虚拟机parallels desktop有什么用 Mac装虚拟机的利与弊 mac装虚拟机对电脑有损害吗
  • Type-C转音频(USB2.0数据传输)+PD充电芯片乐得瑞LDR6500/LDR6023
  • 【busybox记录】【shell指令】expand
  • 软件测试—— 接口测试之通讯流程相关概念
  • AT32 雅特力CAN详细使用说明配置细则
  • 【机器学习】集成方法---Boosting之AdaBoost
  • AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践
  • 鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式
  • 5月6(信息差)
  • Qt在任务栏图标和系统托盘图标上显示红点