设计模式之Singleton 模式.docx
需积分: 0 87 浏览量
更新于2012-03-28
收藏 20KB DOCX 举报
单例模式是软件设计模式中的一种,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于配置管理、线程池、缓存等场景,避免频繁创建和销毁对象带来的开销。
我们来看“饿汉模式”(Eager Initialization),这是实现单例模式的一种方式。在Java中,饿汉模式会立即创建单例对象,当类被加载到内存中时,`ourInstance`就会被初始化。这种做法保证了线程安全,因为在类加载时就已经完成了实例化,所以不存在并发问题。但是,它也存在缺点,即无论是否需要,单例对象都会在程序启动时就被创建,可能会造成资源浪费。
```java
public class EagerSingleton {
private static EagerSingleton ourInstance = new EagerSingleton();
public static EagerSingleton getInstance() {
return ourInstance;
}
private EagerSingleton() {} // 构造函数私有化,防止外部实例化
}
```
接下来是“懒汉模式”(Lazy Initialization),它的核心思想是在真正需要使用单例时才进行实例化。这样可以节省资源,只有当第一次调用`getInstance()`时才会创建对象。然而,未加同步控制的懒汉模式在多线程环境下会出现问题,可能导致多个线程同时创建单例对象,违背了单例模式的设计初衷。为了解决这个问题,可以使用同步化(`synchronized`)关键字:
```java
public class LazySingleton {
private static LazySingleton lazySingleton = null;
private LazySingleton() {} // 构造函数私有化
synchronized public static LazySingleton getInstance() {
if(lazySingleton == null) {
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
```
在这个版本的懒汉模式中,`getInstance()`方法被声明为同步的,这样在多线程环境下,只有一个线程能进入该方法创建实例。虽然解决了线程安全问题,但同步操作会导致性能下降,因为每次获取实例时都需要进行同步,即使对象已经被创建。
为了兼顾性能和线程安全,可以采用双重检查锁定(Double-Checked Locking)模式:
```java
public class DoubleCheckSingleton {
private volatile static DoubleCheckSingleton instance;
private DoubleCheckSingleton() {}
public static DoubleCheckSingleton getInstance() {
if (instance == null) { // 第一次检查
synchronized (DoubleCheckSingleton.class) {
if (instance == null) { // 第二次检查
instance = new DoubleCheckSingleton();
}
}
}
return instance;
}
}
```
在这个模式下,只有在`instance`为`null`且需要创建实例时,才会进行同步操作,大大提高了效率。`volatile`关键字确保了多线程环境下的可见性和有序性,避免了指令重排序问题。
单例模式在Java中主要有饿汉模式、懒汉模式以及双重检查锁定模式等实现方式。每种方式都有其适用场景和优缺点,需要根据实际需求来选择合适的实现策略。在设计单例时,除了要考虑线程安全,还需要关注性能和代码的可读性。

chenwch
- 粉丝: 13
最新资源
- 嵌入式AI平台下深度学习模型轻量化方法研究.docx
- 企业级管理信息系统架构设计与实现案例分析.docx
- 人工智能赋能的高职院校高技能人才培育体系创新与实施路径研究.docx
- 人工智能化和人力资本水平对碳排放绩效的作用.docx
- 人工智能背景下文科教育的范式转型与路径创新研究.docx
- 人工智能技术在保险定价与理赔中的应用案例分析.docx
- 人工智能驱动的数字逻辑实验平台构建及其应用研究.docx
- 人工智能技术在地方本科高校教学质量保障中的应用与优化.docx
- 人工智能时代社交机器人意识形态风险分析:生成逻辑与防范策略探讨.docx
- 人工智能时代法学专业设置改革方向与路径研究.docx
- 人工智能如何推动教育出版融合发展.docx
- 人工智能视觉算法的伦理风险与规制路径研究.docx
- 人工智能影像生成中的偶然运动及其生动性探讨.docx
- 人工智能应用与人的劳动解放:基于四重逻辑的实证研究.docx
- 人工智能在检察业务中的应用前景、挑战与思考.docx
- 人工智能在教育管理中的应用案例研究.docx