I bumped into this code on Wikipedia for a Singleton pattern. Can anyone explain the purpose/logic of checking for null twice?
public class SingletonDemo {
    private static volatile SingletonDemo instance = null;
    private SingletonDemo() {       }
    public static SingletonDemo getInstance() {
            if (instance == null) {
                    synchronized (SingletonDemo .class){
                            if (instance == null) {
                                    instance = new SingletonDemo ();
                            }
                  }
            }
            return instance;
    }
  }
 
     
     
     
     
    