单例模式了解吗?给我解释一下双重检验锁方式实现单例模式
时间: 2023-10-18 07:05:17 浏览: 84
单例模式是一种设计模式,它保证一个类只有一个实例,并提供全局访问点。
双重检验锁(Double Check Lock)方式是一种在多线程环境下实现单例模式的方式。其核心思想是在第一次调用时才创建对象,如果已经创建过对象则直接返回该对象。具体实现如下:
1. 私有化构造函数,防止外部直接创建对象。
2. 声明一个静态变量,用来保存单例对象。
3. 提供一个公共的静态方法,用来获取单例对象。
4. 在公共方法中,先判断单例对象是否已经被创建,如果没有则进行加锁,然后再次判断单例对象是否已经被创建,如果还没有则创建单例对象,最后释放锁。
以下是双重检验锁方式实现单例模式的代码示例:
```
public class Singleton {
private static volatile Singleton instance; // 声明一个静态变量,用来保存单例对象
private Singleton() {} // 私有化构造函数
public static Singleton getInstance() { // 提供一个公共的静态方法,用来获取单例对象
if (instance == null) { // 第一重检验,判断单例对象是否已经被创建
synchronized (Singleton.class) { // 加锁
if (instance == null) { // 第二重检验,再次判断单例对象是否已经被创建
instance = new Singleton(); // 创建单例对象
}
}
}
return instance; // 返回单例对象
}
}
```
需要注意的是,在第一重检验时,因为存在多线程并发访问的情况,可能会出现多个线程同时判断单例对象为null的情况,从而同时进入加锁的代码块。因此需要使用volatile关键字来保证instance变量在多线程环境下的可见性。
阅读全文