news 2026/3/27 2:55:34

单例模式 7 种实现方式对比表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单例模式 7 种实现方式对比表
序号实现方式线程安全懒加载性能防止反射破坏防止序列化破坏代码复杂度适用场景
1饿汉式单线程环境简单应用
2懒汉式(线程不安全)单线程环境,性能要求高
3懒汉式(方法同步)多线程但性能要求不高
4双重检查锁(DCL)多线程,性能要求高
5静态内部类推荐使用,兼顾性能和懒加载
6枚举最佳实践,保证绝对单例
7ThreadLocal单例线程内安全线程池环境,线程隔离单例

详细说明

1. 饿汉式

public class EagerSingleton { private static final EagerSingleton instance = new EagerSingleton(); private EagerSingleton() {} public static EagerSingleton getInstance() { return instance; } }

优点: 实现简单,线程安全
缺点: 类加载时就初始化,浪费内存

2. 懒汉式(线程不安全)

public class LazySingleton { private static LazySingleton instance; private LazySingleton() {} public static LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance; } }

优点: 懒加载,需要时才创建
缺点: 线程不安全,可能创建多个实例

3. 懒汉式(方法同步)

public class SyncSingleton { private static SyncSingleton instance; private SyncSingleton() {} public static synchronized SyncSingleton getInstance() { if (instance == null) { instance = new SyncSingleton(); } return instance; } }

优点: 线程安全,懒加载
缺点: 每次获取都加锁,性能差

4. 双重检查锁(DCL)

public class DCLSingleton { private volatile static DCLSingleton instance; private DCLSingleton() {} public static DCLSingleton getInstance() { if (instance == null) { synchronized (DCLSingleton.class) { if (instance == null) { instance = new DCLSingleton(); } } } return instance; } }

优点: 线程安全,懒加载,性能较好
缺点: JDK1.5+才完全安全,实现稍复杂

5. 静态内部类

public class InnerClassSingleton { private InnerClassSingleton() {} private static class SingletonHolder { private static final InnerClassSingleton instance = new InnerClassSingleton(); } public static InnerClassSingleton getInstance() { return SingletonHolder.instance; } }

优点: 线程安全,懒加载,性能好
缺点: 无法防止反射破坏

6. 枚举(最佳实践)

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

优点:

  • 绝对防止反射破坏

  • 自动处理序列化

  • 线程安全

  • 代码简洁

缺点: 不是懒加载,枚举类加载时就初始化

7. ThreadLocal单例

public class ThreadLocalSingleton { private static final ThreadLocal<ThreadLocalSingleton> threadLocal = ThreadLocal.withInitial(ThreadLocalSingleton::new); private ThreadLocalSingleton() {} public static ThreadLocalSingleton getInstance() { return threadLocal.get(); } }

优点: 线程内单例,适合线程池环境
缺点: 每个线程有自己的实例,不是真正的全局单例

选择建议

  1. 简单场景:饿汉式

  2. 标准需求:静态内部类(推荐)

  3. 严格要求:枚举(最佳实践)

  4. 线程隔离:ThreadLocal单例

  5. 历史遗留:DCL(注意volatile关键字)

注意事项

  1. 反射攻击防护:只有枚举能天然防止反射破坏,其他方式需要额外防护代码

  2. 序列化问题:实现Serializable接口时,需要添加readResolve()方法

  3. 克隆防护:重写clone()方法,抛出CloneNotSupportedException

  4. 多类加载器:自定义类加载器可能破坏单例,需注意类加载器隔离

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 22:45:11

学术写作的“未来引擎”:解锁书匠策AI的期刊论文六大黑科技

在学术江湖中&#xff0c;期刊论文是研究者攀登高峰的“通关文牒”&#xff0c;但选题撞车、逻辑混乱、查重焦虑、格式错漏等问题&#xff0c;常让学者们陷入“论文地狱”。如今&#xff0c;一款名为书匠策AI的智能工具正以“学术外挂军团”的姿态横空出世&#xff0c;用六大核…

作者头像 李华
网站建设 2026/3/25 10:37:50

学术江湖的“智能导航仪”:书匠策AI如何重塑期刊论文写作新生态

在学术江湖中&#xff0c;期刊论文是研究者攀登科研高峰的“通关文牒”&#xff0c;但选题撞车、逻辑混乱、查重焦虑、格式错漏等问题&#xff0c;常让学者们陷入“论文地狱”。如今&#xff0c;一款名为书匠策AI的智能工具横空出世&#xff0c;它像一台精密的“学术导航仪”&a…

作者头像 李华
网站建设 2026/3/25 18:35:48

学术探险家的“智能罗盘”:书匠策AI如何重塑期刊论文写作新生态

在学术研究的浩瀚星海中&#xff0c;期刊论文是科研工作者攀登高峰的“通关文牒”。然而&#xff0c;选题撞车、逻辑混乱、查重焦虑、格式错漏……这些“学术暗礁”常让研究者陷入“论文地狱”。如今&#xff0c;一款名为书匠策AI的智能工具正以“学术探险家的智能罗盘”之姿&a…

作者头像 李华
网站建设 2026/3/24 11:24:52

【小程序毕设源码分享】基于springboot+小程序的校服订购系统小程序的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/23 21:28:51

【小程序毕设全套源码+文档】基于Java的校园导航微信小程序的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/24 12:31:21

【小程序毕设全套源码+文档】基于微信小程序的“财来财往”微信小程序设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华