Добрый день. В данный момент я изучаю паттерн 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;
    }
}