Обложка канала

Библиотека джависта

20804 @javaproglib

Полезные материалы по всему, что может быть полезно разработчику на Java.

Библиотека джависта

4 года назад
Открыть в
#вопросы_с_собеседований Как создать потокобезопасный Singleton? Static field
 class Singleton {
  public static final Singleton INSTANCE = new Singleton();
}

• Enum
 enum Singleton {
  INSTANCE;
}

Synchronized Accessor
 class Singleton {
  private static Singleton instance;
  
  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}

• Double Checked Locking & volatile
 class Singleton {
        private static volatile Singleton instance;
  
        public static Singleton getInstance() {
    Singleton localInstance = instance;
    if (localInstance == null) {
      synchronized (Singleton.class) {
        localInstance = instance;
        if (localInstance == null) {
          instance = localInstance = new Singleton();
        }
      }
    }
    return localInstance;
  }
}

• On Demand Holder Idiom public class Singleton { public static class SingletonHolder { public static final Singleton HOLDER_INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.HOLDER_INSTANCE; } }