java单例模式核心是强制类仅创建一个实例并提供全局唯一访问入口,通过私有构造器、静态实例和静态获取方法实现;推荐静态内部类模式,兼顾线程安全、懒加载与高性能;高安全场景可用枚举单例。

Java 中设计单例模式,核心是让一个类**只产生一个实例**,并提供**全局唯一访问入口**。这不是靠程序员自觉不 new,而是通过代码机制强制约束。关键在三点:私有构造器、静态持有实例、统一获取方法。
私有构造器:切断外部创建路径
把构造方法声明为 private,外部类就无法用 new Singleton() 创建对象。这是单例的底线,没有这一步,其他都白搭。
例如:
private Singleton() { }静态实例 + 全局访问方法:控制唯一出口
实例必须是 static 的,属于类本身而非某个对象;访问方法也必须是 static 的,才能不依赖实例就被调用。
常见写法有两种思路:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 饿汉式:类加载时就创建好实例,线程安全但不懒加载
-
懒汉式(带双重检查):首次调用
getInstance()才创建,需加volatile和同步块防并发问题
推荐方案:静态内部类(Holder 模式)
它兼顾了线程安全、懒加载和无锁高性能:
- 外部类不包含实例,不触发初始化
- 静态内部类里定义
final static实例,JVM 保证类加载时只执行一次 - 第一次调用
getInstance()时才加载内部类,自然实现懒加载
代码简洁,无需同步,是中大型项目常用选择。
特殊场景:枚举单例
如果要彻底防反射攻击和序列化破坏,直接用 枚举:
public enum Singleton { INSTANCE; }调用 Singleton.INSTANCE 即可。JVM 保证枚举实例的唯一性与安全性,Effective Java 明确推荐,适合高安全要求场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










