JAVA之单例模式

server/2025/1/15 7:57:15/

单例模式(Singleton Pattern)是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在软件设计中,单例模式常用于控制对资源的访问,例如数据库连接、线程池等。以下是单例模式的详细介绍及JAVA代码实现。

一、单例模式的优点

  • 控制资源的使用,避免资源的多重占用。
  • 提供全局访问点,方便资源的管理。
  • 系统中只有一个实例,减少内存开销。
  • 避免对资源的多重占用,提高系统的性能。

二、单例模式的缺点

三、单例模式的实现方式 单例模式有多种实现方式,以下列举几种常见的实现方式:

  • 懒汉式(线程不安全)
  • 懒汉式(线程安全)
  • 饿汉式
  • 双重校验锁
  • 静态内部类
  • 枚举 以下分别对这几种实现方式进行详细说明及代码实现。
  • 懒汉式(线程不安全) 懒汉式单例模式在类加载时不初始化,在需要时才创建实例。缺点是线程不安全。
  1. JAVA代码实现:

public class Singleton {// 私有静态变量,用于存储单例实例private static Singleton instance;// 私有构造方法,防止外部直接创建实例private Singleton() {}// 公有静态方法,用于获取单例实例public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
  1. 懒汉式(线程安全) 在懒汉式的基础上,通过同步方法保证线程安全。缺点是效率较低。 JAVA代码实现:

public class Singleton {private static Singleton instance;private Singleton() {}// 同步方法,保证线程安全public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
  1. 饿汉式 饿汉式单例模式在类加载时就完成了初始化,保证了线程安全。缺点是类加载时就初始化,可能会浪费资源。 JAVA代码实现:

public class Singleton {// 私有静态变量,类加载时初始化private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
  1. 双重校验锁 双重校验锁单例模式在懒汉式的基础上,通过双重校验锁保证线程安全,同时提高效率。 JAVA代码实现:

public class Singleton {// 私有静态变量,使用volatile关键字保证多线程下的可见性和禁止指令重排序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;}
}
  1. 静态内部类 静态内部类单例模式利用静态内部类的特性,实现懒加载和线程安全。 JAVA代码实现:

public class Singleton {// 私有构造方法private Singleton() {}// 静态内部类,用于持有单例实例private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}// 公有静态方法,获取单例实例public static final Singleton getInstance() {return SingletonHolder.INSTANCE;}
}
  1. 枚举 枚举单例模式利用枚举的特性,实现单例,且自动支持序列化机制,防止反射攻击。 JAVA代码实现:

public enum Singleton {// 枚举元素,本身就是单例INSTANCE;// 公有方法,可以添加其他业务方法public void doSomething() {// 业务逻辑}
}

四、总结

单例模式是一种简单且常用的设计模式,适用于需要确保一个类只有一个实例的场景。在实际开发中,应根据具体需求选择合适的实现方式。


http://www.ppmy.cn/server/158212.html

相关文章

25/1/13 算法笔记<嵌入式> 继续学习Esp32

PWM(Pulse Width Modulation,脉宽调制) 是一种通过快速切换高低电平来模拟中间电压值的技术。它广泛应用于控制 LED 亮度、电机速度、音频生成等场景。 analogWrite函数:用于在微控制器(如 Arduino)上生成模拟信号。 …

网络原理(二)—— https

https 简介 https 也是一个应用层协议,他是由 http 和 SSL 组成的(在 http 的基础上进行加密,把原本http 的明文传输变为了密文传输),简称为 https。 加密的方式大体分为两大类,分别是对称加密和非对称加…

【HTML+CSS+JS+VUE】web前端教程-20-选择器(二)

ID选择器 针对某一个特定的标签来使用,只能使用一次,css中的ID选择器以#定义 <p id="nihao">你好</p>#nihao{color: red;font-size: 50px;}特别强调; ID是唯一的 ID不能以数字开头 合并选择器

CSS响应式

除了常见的media、flex、grid外的其他css响应元素 1.min()函数 当我们想根据不同尺寸调整容器的边距时&#xff0c;首先想到的可能是媒体查询 <style>.container{padding: 5em;}media (max-width: 600px) {.container{padding: 2em;}} </style> <div class&…

2025域名出售交易平台PHP源码

源码介绍 2025域名出售交易平台PHP源码,搭建即可正常使用&#xff0c;后台功能测试正常&#xff0c;前台测试正常,无需到处找教程或修复&#xff0c;教程一次性到位 搭建教程 PHP必须是5.6的 导入数据库 数据库配置文件 config/config.php 后台 http://域名/ymadmin 用户&am…

前端开发:HTML常见标签

1.注释标签 注释不会显示在界面上 . 目的是提高代码的可读性 . ctrl / 快捷键可以快速进行注释 / 取消注释 . <!-- 我是注释 --> 2.标题标签 有六个 , 从 h1 - h6. 数字越大 , 则字体越小 <h1> hello </h1> //我们所写的csdn的格式中的标题一…

STM32 FreeRTOS的任务创建和删除

目录 任务创建和删除的API函数 动态创建任务函数 函数说明 动态创建任务步骤 动态创建任务函数内部实现 静态创建任务函数 函数说明 静态创建任务步骤 静态创建内部实现 任务删除函数 函数说明 删除任务流程 内部实现过程 任务创建和删除的API函数 任务的创建和删…

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…