Sobes.tech
Junior — Middle

Кадом роҳҳо метавонанд ба ҷои калимаи калидии synchronized барои иҷрои намунаи Singleton дар муҳити бисёрсоҳавӣ истифода шаванд?

sobes.tech AI

Ҷавоб аз AI

Вместо использования ключевого слова synchronized для реализации Singleton в многопоточной среде можно применить следующие подходы:

  1. Инициализация через статический вложенный класс (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;
        }
    }
    
  2. Использование enum

    Enum в Java гарантирует создание единственного экземпляра и потокобезопасность по умолчанию.

    public enum Singleton {
        INSTANCE;
    
        public void someMethod() {
            // ...
        }
    }
    
  3. 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().