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

Java单列模式总结及实现

以下是Java单例模式的全面解析及主流实现方式:

一、单例模式核心特性

  1. 唯一实例‌:确保类只有一个实例对象
  2. 私有构造‌:禁止外部通过new创建实例
  3. 全局访问点‌:提供static方法获取唯一实例
  4. 典型应用‌:配置管理、线程池、日志系统等需全局唯一访问的场景

二、8种主流实现方式对比

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 Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton(); // 多线程下可能创建多个实例}return instance;}
}
  • 风险‌:需配合synchronized解决线程安全问题
3. 双重检查锁(DCL)
public class Singleton {
    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;
    }
}
 
  • 关键点‌:volatile防止指令重排序
4. 静态内部类
public class Singleton {private Singleton() {}private static class Holder {static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return Holder.INSTANCE;}
}
  • 优势‌:懒加载+线程安全+无锁高性能
5. 枚举单例(Effective Java推荐)

public enum Singleton {
    INSTANCE;
    public void doSomething() { /* 业务方法 */ }
}

  • 最佳实践‌:防反射攻击、序列化安全

三、Spring框架中的单例实践

  • 容器级单例‌:Spring默认使用ConcurrentHashMap管理单例Bean
  • 与原生单例区别‌:Spring单例是IOC容器范围内唯一,而非JVM级

四、选型建议

实现方式线程安全懒加载防反射适用场景
饿汉式✔️初始化耗时不敏感的场景
双重检查锁✔️✔️高并发且需延迟初始化
枚举✔️✔️需要绝对安全的场景
静态内部类✔️✔️主流推荐方案

最新趋势‌:枚举单例因其安全性成为企业级开发首选,而Kotlin的object语法进一步简化了单例实现。实际开发中应结合性能需求和安全要求选择方案。

相关文章:

  • 高考志愿填报,如何查询高校历年录取分数线?
  • 哈希表与unordered_set和unordered_map的实现
  • ESP8266自动浇水系统
  • 寄存器被改写问题总结
  • 408第一季 - 数据结构 - 折半查找与二叉排序树
  • 校园导航系统核心技术解析:高精度定位与 AR 实景导航的应用实践
  • 【Pandas】pandas DataFrame isna
  • 多光谱图像技术在苗期作物与杂草识别中的研究进展
  • OkHttp 中实现断点续传 demo
  • gRPC、WebSocket 与 HTTP 的核心区别对比
  • 【JavaScript】 HTTP Cookie 核心知识梳理与常用的封装实现
  • 学校招生小程序源码介绍
  • c++中类的继承
  • 0610_特性和反射_加密和解密_单例模式
  • Playwright 与 Selenium:自动化测试的两大主流工具对比
  • Kubernetes 从入门到精通-pod基础管理
  • 饿一饿对肝脏好
  • ETL中图表统计分析模版组件使用
  • Java设计模式基础问答
  • 设计模式和设计原则回顾
  • 营销型网站有那些网站/江北seo综合优化外包
  • 网站优化http://www.seo668.cn/seo/橙子建站
  • 设计师网站 知乎/百度搜索推广官网
  • 网站建设zvge/南宁网站建设服务公司
  • 苏州网站制作设计/网店产品seo如何优化
  • 沈阳响应式网站制作/seo搜索引擎优化实训总结