Java版的7种单例模式写法示例

上传者: 38670420 | 上传时间: 2026-04-17 11:36:35 | 文件大小: 86KB | 文件类型: PDF
单例模式是软件设计模式中的一种,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。在Java中,由于语言特性,实现单例模式有多种方式,每种方式都有其优缺点。以下是Java中7种常见的单例模式实现方式的详细说明: 1. **懒汉式(线程不安全)**: 这是最直观的实现,但不是线程安全的。在多线程环境中,可能导致多个实例的创建。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 2. **懒汉式(线程安全,同步方法)**: 使用`synchronized`关键字确保了线程安全,但每次调用`getInstance()`都会进行同步,降低了效率。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 3. **饿汉式**: 在类加载时就初始化实例,确保了线程安全,但失去了懒加载的优点。 ```java public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 4. **饿汉式(变种)**: 类似于第三种,但在静态块中初始化,同样在类加载时完成实例化。 ```java public class Singleton { private static Singleton instance = null; private Singleton() {} static { instance = new Singleton(); } public static Singleton getInstance() { return instance; } } ``` 5. **静态内部类**: 利用类加载机制保证线程安全,只有在调用`getInstance()`时才加载内部类,实现了延迟加载。 ```java public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton() {} public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } ``` 6. **双重检查锁定(DCL,Double-Checked Locking)**: 在多线程环境下兼顾了线程安全和懒加载,是推荐的实现方式。 ```java 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; } } ``` 7. **枚举**: 通过枚举方式实现单例,既简单又线程安全,同时防止反射攻击。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 每种实现方式都有其适用场景。例如,如果初始化过程非常耗时或资源密集,可能需要选择懒加载的方式;而在性能要求较高的系统中,可能会选择饿汉式或枚举方式。了解并掌握这些实现方式,可以帮助开发者根据实际需求选择最适合的单例模式实现。

文件下载

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明