Java 单例模式 DCL双重检查
DCL双重检查是指在单例模式中使用双重检查来确保只有一个实例被创建。
在Java中,如果多个线程同时访问getInstance()方法,可能会导致创建多个实例的问题。为了解决这个问题,可以使用DCL双重检查来确保只有一个实例被创建。
DCL双重检查的实现如下:
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;
}
}
在上面的代码中,getInstance()方法首先检查instance是否为null,如果为null,则进入同步块。在同步块中再次检查instance是否为null,如果为null,则创建一个新的实例。使用volatile关键字修饰instance是为了确保多线程下的可见性。
DCL双重检查是一种延迟加载的方式,在多线程的情况下能够保证只有一个实例被创建,并且性能也比较高。但是需要注意的是,DCL双重检查只适用于Java 1.5及以上的版本。在Java 1.5之前的版本中,由于指令重排序的问题,可能会导致DCL失效,所以需要额外的措施来保证单例的正确性
原文地址: https://www.cveoy.top/t/topic/iV5I 著作权归作者所有。请勿转载和采集!