双端检索(Double Checked Locking)是一种用于实现线程安全的单例模式。该模式在多线程环境下只会创建一个实例,并且保证该实例的唯一性。

实现双端检索的单例模式需要满足以下条件:

  1. 将构造函数私有化,防止外部直接创建实例。
  2. 声明一个静态变量来存储唯一实例。
  3. 提供一个公共的静态方法来获取唯一实例。
  4. 在公共方法中使用双端检索,保证多线程环境下只创建一个实例。

以下是一个示例代码:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录