Добрый день. В данный момент я изучаю паттерн Singleton и его реализации. Дошёл до Double checked
locking. И вот тут я увидел два варианта. Один с созданием локальной переменной в методе getInstance(), второй же, просто с использованием статической переменной класса. Какой вариант лучше использовать?
1. С локальной переменной
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
Singleton localInstance = instance;
if (localInstance == null) {
synchronized (Singleton.class) {
localInstance = instance;
if (localInstance == null) {
instance = localInstance = new Singleton();
}
}
}
return localInstance;
}
}
2. С переменной класса
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;
}
}