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

单例模式

定义

        单例模式(Singleton Pattern)是java最简单的设计模式之一,用于保证某个类在运行期间只有一个实例对外提供服务,我们称这种类型的类为单例类。

设计原则

        1. 保证一个类只有一个实例;

        2. 为实例提供一个全局访问点。

实现方式

饿汉式

代码示例

package com.sumlv.javase.note;/*** 单例示例** @Auther: yuzhuo.song* @Date: 2025-03-14*/
public class Singleton {private static Singleton instance = new Singleton();public static Singleton getInstance() {return instance;}/*** 用于避免序列化对单例的破坏* 如果单例类没有实现序列化接口则不需要该方法* * @return 实例对象*/private Object readResolve() {return instance;}/*** 用于避免反射对单例的破坏*/private Singleton() {if (instance != null) {throw new RuntimeException("illegal access");}}}

补充说明

        1. 线程安全;

        2. 不支持延时加载;

        3. 获取实例对象速度较快;

        4. 如果实例对象较大且一直未使用会造成内存浪费。

懒汉式

代码示例

package com.sumlv.javase.note;/*** 单例示例** @Auther: yuzhuo.song* @Date: 2025-03-14*/
public class Singleton {private static Singleton instance;public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}/*** 用于避免序列化对单例的破坏* 如果单例类没有实现序列化接口则不需要该方法* * @return 实例对象*/private Object readResolve() {return instance;}/*** 用于避免反射对单例的破坏*/private Singleton() {if (instance != null) {throw new RuntimeException("illegal access");}}}

补充说明

        1. 支持延迟加载;

        2. 保证多线程模式下实例的唯一性;

        3. 并发度低,在频繁调用时会产生性能瓶颈。

双重检查锁

代码示例

package com.sumlv.javase.note;/*** 单例示例** @Auther: yuzhuo.song* @Date: 2025-03-14*/
public class Singleton {private static volatile Singleton instance;public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}/*** 用于避免序列化对单例的破坏* 如果单例类没有实现序列化接口则不需要该方法* * @return 实例对象*/private Object readResolve() {return instance;}/*** 用于避免反射对单例的破坏*/private Singleton() {if (instance != null) {throw new RuntimeException("illegal access");}}}

补充说明

        1. 支持延迟加载;

        2. 并发度高,在频繁调用时不会产生性能瓶颈。

静态内部类

代码示例

package com.sumlv.javase.note;/*** 单例示例** @Auther: yuzhuo.song* @Date: 2025-03-14*/
public class Singleton {public static Singleton getInstance() {return InnerClass.instance;}/*** 用于避免序列化对单例的破坏* 如果单例类没有实现序列化接口则不需要该方法* * @return 实例对象*/private Object readResolve() {return InnerClass.instance;}/*** 用于避免反射对单例的破坏*/private Singleton() {if (InnerClass.instance != null) {throw new RuntimeException("illegal access");}}private static class InnerClass {private static Singleton instance = new Singleton();}}

补充说明

        1. 支持延迟加载;

        2. 并发度高,在频繁调用时不会产生性能瓶颈。

        3. 实现方式相较于双重检查锁更为简洁。

枚举

代码示例

package com.sumlv.javase.note;/*** 单例示例** @Auther: yuzhuo.song* @Date: 2025-03-14*/
public enum Singleton {INSTANCE;public static Singleton getInstance() {return INSTANCE;}}

补充说明

        1. 最简单的单例实现方式;

        2. 线程安全;

        3. 无需关心反射和序列化对单例造成破坏;

http://www.xdnf.cn/news/19451.html

相关文章:

  • Selenium 自动化测试实战:绕过登录直接获取 Cookie
  • 希尔排序。
  • Java面试-微服务(业务问题)
  • QT控件QPlainTextEdit、QTextEdit与QTextBrowser的区别
  • 【秋招笔试】2025.08.31小红书秋招笔试真题
  • 解读数据中台建设汇报方案【附全文阅读】
  • 淘天二面总结
  • 链表算法知识汇总
  • lesson51:CSS全攻略:从基础样式到前沿特性的实战指南
  • 【读论文】量子关联增强双梳光谱技术
  • RabbitMinQ(模拟实现消息队列项目)02
  • 【零碎小知识点 】(四) Java多线程编程深入与实践
  • Spring Cloud ------ Gateway
  • 阿里Qoder怎么样?实测对比TRAE SOLO 和 CodeBuddy IDE
  • 【甲烷数据集】全球逐日无缝隙柱平均干空气甲烷浓度(XCH₄)
  • Solid Explorer文件管理器:功能强大的安卓文件管理器及网盘文件管理器
  • FFMPEG AAC
  • 【MySQL详解】索引、事务、锁、日志
  • 【MySQL基础】MySQL核心操作全解析
  • GPT - 5 技术前瞻与开发者高效接入路径探索​
  • Java-113 深入浅出 MySQL 扩容全攻略:触发条件、迁移方案与性能优化
  • Java实现图像像素化
  • VirtualBox7.2安装步骤
  • RT-DETR网络结构
  • 开源 C# .net mvc 开发(九)websocket--服务器与客户端的实时通信
  • LangChain VectorStores核心:多向量数据库统一交互层与RAG存储中枢
  • 云原生新手入门完整学习指南
  • 14:00面试,15:00就出来了,问的问题过于变态了。。。
  • 【面试场景题】100M网络带宽能不能支撑QPS3000
  • UnderPressure 论文简单解读