Singleton с Enum против Singleton с двойной проверкой блокировки

Мне интересно, какой из них лучше на практике в многопоточной среде. Я понимаю, что Singleton как тип Enum создает экземпляр при загрузке класса. Кроме этого, я не вижу ничего более существенного. Есть ли плюсы и минусы?

Singleton as Enum type:

 public enum Singleton {
      INSTANCE;
      public void doSomething(){ ... }
 }

Singleton with double-checked locking:

 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;
      }

 }

Ответы на вопрос(3)

Ваш ответ на вопрос