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

二十三种设计模式-单例模式

单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。

单例模式两种实现方法:懒汉式和饿汉式。

懒汉式(Lazy Initialization)

懒汉式单例模式在第一次被使用时才创建实例,这种方式可以延迟对象的创建,节省资源。

线程不安全实现:

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

这种实现方式在多线程环境下可能会出现问题,因为两个线程可能同时检查到instancenull并尝试创建实例,导致创建多个实例。

线程安全实现(双重检查加锁):

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关键字和双重检查锁定机制来确保线程安全。

饿汉式(Eager Initialization)

饿汉式单例模式在类被加载时就创建实例,这种方式保证了实例的唯一性,并且在任何时候都能快速访问实例。

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

饿汉式实现简单,并且是线程安全的,因为实例在类加载时就已经创建好了,不存在多线程访问的问题。

区别

  1. 实例创建时机:懒汉式在第一次使用时创建实例,而饿汉式在类加载时就创建实例。
  2. 资源利用:懒汉式可以延迟对象的创建,节省资源,而饿汉式不管是否使用都会创建实例,可能会造成资源浪费。
  3. 线程安全性:饿汉式天然线程安全,而懒汉式需要额外的处理来保证线程安全。
  4. 性能:懒汉式在第一次访问时需要进行同步操作,可能会有性能损耗;饿汉式则没有这个问题,但需要承担实例始终占用内存的代价。

选择哪种方式取决于具体的需求和场景。如果实例化代价较大,且不是经常使用,懒汉式可能更合适;如果实例化代价不大,或者需要保证绝对的线程安全,饿汉式可能更合适。

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

相关文章:

  • 【微服务】SpringBoot 国际化适配方案使用详解
  • 太阳能电池板缺陷识别数据集,使用yolo,coco json,pasical voc xml格式标注,可识别旁路二极管,电池故障,热点,2234张原始图片
  • 客户案例:基于慧集通平台集成打通小满CRM+金蝶云星空+钉钉
  • ubuntu 如何使用vrf
  • Debian-linux运维-ssh配置(兼容Jenkins插件的ssh连接公钥类型)
  • K8S详解(5万字详细教程)
  • Redis6为什么引入了多线程?
  • KMP 2024 年总结,Kotlin 崛起的一年
  • leecode188.买卖股票的最佳时机IV
  • 分布式消息队列RocketMQ
  • 诗韵--代码之外的生活:2025 元旦歌
  • SpringBoot项目启动的时候,指定jvm内存大小的3种方式
  • 学习vue3的笔记
  • MySQL UNION
  • day21-ubuntu入门
  • 开发小工具:ping地址
  • 在 Python 中使用 ADX 进行算法交易
  • Unity 3D 从入门到精通:开启游戏开发的奇幻之旅
  • 神经网络-VggNet
  • 用AI生成PPT,告别繁琐,一键生成高效方案
  • 基于 `android.accessibilityservice` 的 Android 无障碍服务深度解析
  • UE5材质节点Frac/Fmod
  • 【微服务】【Sentinel】认识Sentinel
  • Kafka 性能提升秘籍:涵盖配置、迁移与深度巡检的综合方案
  • 小程序租赁系统构建指南与市场机会分析
  • SOME/IP 协议详解——远程过程调用(RPC)
  • C++ 设计模式:命令模式(Command Pattern)
  • 安卓/system/bin下命令中文说明(AI)
  • MATLAB程序转C# WPF,dll集成,混合编程
  • 【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus