Назад к вопросам
Junior — Middle
75
Какие подходы можно использовать вместо ключевого слова synchronized для реализации паттерна Singleton в многопоточной среде?
Ответ от нейросети
sobes.tech AI
Вместо использования ключевого слова synchronized для реализации Singleton в многопоточной среде можно применить следующие подходы:
-
Инициализация через статический вложенный класс (Initialization-on-demand holder idiom)
Этот способ использует ленивую инициализацию и гарантирует потокобезопасность без синхронизации.
public class Singleton { private Singleton() {} private static class Holder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return Holder.INSTANCE; } } -
Использование enum
Enum в Java гарантирует создание единственного экземпляра и потокобезопасность по умолчанию.
public enum Singleton { INSTANCE; public void someMethod() { // ... } } -
Double-checked locking с volatile
Позволяет избежать полной синхронизации при каждом вызове, синхронизируя только при первом создании экземпляра.
public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
Каждый из этих подходов обеспечивает потокобезопасность без постоянного использования synchronized на методе getInstance().