DCL 单例模式 —— 双重检查锁
public class Singleton {
private volatile static Singleton instance; // 使用volatile关键字确保可见性
private Singleton() {
// 私有构造函数,防止通过new关键字创建实例
}
public static Singleton getInstance() {
if (instance == null) { // 第一次检查,减少加锁的消耗
synchronized (Singleton.class) {
if (instance == null) { // 第二次检查,保证只有一个线程创建实例
instance = new Singleton();
}
}
}
return instance;
}
}
DCL(Double-Checked Locking)单例模式是一种在多线程环境下延迟初始化单例对象的设计模式。它的目的是在尽量保持高性能的同时确保只存在一个实例。
单例模式的作用是确保一个类只有一个实例,并提供全局访问点。DCL单例模式进一步在多线程环境下解决了并发访问的问题。以下是DCL单例模式的作用:
1. 延迟初始化:DCL单例模式延迟初始化实例,即在需要使用实例之前不创建实例。这样可以节省系统资源。
2. 高性能:DCL单例模式通过使用双重检查锁定机制,在多线程环境下只有在第一次获取实例时才会进行同步操作。之后的获取实例操作不需要再进行同步,提高了性能。
3. 线程安全:DCL单例模式通过对实例创建的同步进行双重检查,确保在多线程环境下只有一个线程可以创建实例。这样可以避免多个线程同时创建多个实例的问题。
使用DCL单例模式可以在需要全局唯一实例的情况下,提供高性能和线程安全的解决方案。