Junior — Middle
Кадом роҳҳо метавонанд ба ҷои калимаи калидии synchronized барои иҷрои намунаи Singleton дар муҳити бисёрсоҳавӣ истифода шаванд?
sobes.tech AI
Ҷавоб аз 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().