双重锁单例模式是一种在多线程环境下保证只有一个实例被创建的方法。下面是一个使用双重锁单例模式的Java代码示例:
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;
}
}
在上面的代码中,getInstance() 方法首先检查实例是否已经创建,如果没有创建,才会进入同步块。在进入同步块之后,再次检查实例是否已经创建,这是为了避免多个线程同时进入同步块时,创建多个实例的问题。使用 volatile 关键字可以确保在多线程环境下,instance 变量的可见性和有序性,从而避免了由于指令重排导致的问题。
双重锁单例模式可以在多线程环境下保证只有一个实例被创建,并且在实例被使用之前不会进行实例化,从而提高了性能。