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

Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

​
单例设计模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象、且对象创建成本较高时非常有用。

在 Java 中,实现线程安全的单例模式有多种方法。以下是几种常见的方法:

1. 饿汉式(静态常量)
这种方式在类加载时就完成了初始化,因此是线程安全的,但可能会导致资源浪费。


public class Singleton {
private static final Singleton INSTANCE = new Singleton();

private Singleton() {
// 私有构造函数
}

public static Singleton getInstance() {
return INSTANCE;
}
}
2. 懒汉式(双重检查锁定)
这种方式在多线程环境下也能保证线程安全,同时延迟了实例的创建。



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;
}
}
3. 静态内部类
这种方式既保证了线程安全,又避免了资源浪费,而且实现了延迟初始化。


public class Singleton {
private Singleton() {
// 私有构造函数
}

private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
4. 枚举
这种方式不仅线程安全,还能防止反序列化重新创建新的对象。



public enum Singleton {
INSTANCE;

public void doSomething() {
// 业务逻辑
}
}

// 使用
Singleton.INSTANCE.doSomething();



http://www.jsqmd.com/news/458373/

相关文章:

  • 基于n8n与FastGPT构建智能客服系统的架构设计与实战
  • BUSCO结果解读全攻略:如何从C/S/D/F/M值判断你的基因组组装质量?
  • 告别版本混乱:在Windows上使用JEnv高效管理多版本JDK
  • FreeRTOS任务调度与SPI(FLASH)操作冲突的临界区保护实践
  • Unity Scroll View进阶技巧:打造丝滑的电商商品轮播效果
  • ComfyUI热门长视频模型:技术原理与高效部署实战
  • Chrome iframe权限配置全攻略:从Permissions API到Feature-Policy实战
  • 骄子手板模型常见问题解答(2026最新专家版) - 速递信息
  • 现代控制理论——矩阵指数函数的四种实用计算策略
  • IEEE Transactions投稿实战:电力电子领域顶刊从投稿到接收的全流程解析
  • 智能制造物流核心引擎:2026年主流AMR搬运机器人厂家竞争格局与战略解析 - 品牌推荐
  • PyTorch批量矩阵乘法torch.bmm()详解:从基础到实战应用
  • 解密SSH密钥权限问题:为何RSA私钥文件权限设置不当会导致agent拒绝操作
  • 《QGIS快速入门与应用基础》210:符号属性→保存符号
  • C语言程序设计核心详解 数制及转换与ASCII码
  • 2026年国内智慧档案室品牌TOP6排行:西南区域市场的“隐形冠军”突围战 - 博客湾
  • 从零到生产:手把手教你用docker-compose在ARM64上部署Tendis2.4.2(含数据持久化配置)
  • 空谷回音:当手机成为寂静本身
  • 如何让闲置屏幕变身时间艺术品?FlipIt翻页时钟的实用美学之旅
  • 2026年3月广州达人媒介采买企业实力排行榜 - 十大品牌榜
  • 颠覆式D2R自动化工具:Botty如何通过技术革新实现效率提升300%
  • 基于RK3576J工业控制器的智能分切控制系统解析
  • ChatTTS硬件要求深度解析:从入门到生产环境部署指南
  • BERT中文智能客服实战:从零搭建到性能调优指南
  • 2026年热门的设备回收公司推荐:五金设备回收/制冷设备回收推荐公司 - 行业平台推荐
  • Pydictor进阶玩法:如何用Python脚本定制你的专属爆破字典?
  • 《Java 程序设计》 内部类、枚举和注解
  • 5个创新功能重新定义声音合成:OpenUtau高效创作指南
  • 突破二进制限制:JSXBin脚本恢复工具全解析
  • 杭州万国维修哪里好?专业测评+避坑指南(附数据参考) - 时光修表匠