双端检索的单例模式
双端检索(Double Checked Locking)是一种用于实现线程安全的单例模式。该模式在多线程环境下只会创建一个实例,并且保证该实例的唯一性。
实现双端检索的单例模式需要满足以下条件:
- 将构造函数私有化,防止外部直接创建实例。
- 声明一个静态变量来存储唯一实例。
- 提供一个公共的静态方法来获取唯一实例。
- 在公共方法中使用双端检索,保证多线程环境下只创建一个实例。
以下是一个示例代码:
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;
}
}
在上述代码中,双端检索的核心代码如下:
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
该代码会先检查是否已经有实例被创建,如果没有,则进入同步块。在同步块中再次检查实例是否为空,如果为空,则创建实例。
需要注意的是,为了保证线程安全,instance变量需要使用volatile关键字来修饰。这样可以保证在多线程环境下,每个线程都能够正确地读取到instance变量的最新值
原文地址: http://www.cveoy.top/t/topic/hkar 著作权归作者所有。请勿转载和采集!