Встречается на собеседованиях • сегодня

Как Singleton связан с многопоточностью

Singleton может создавать проблемы в многопоточности, если не реализован потокобезопасно. При одновременном обращении нескольких потоков к методу получения экземпляра может возникнуть race condition, приводящий к созданию нескольких экземпляров.

Потокобезопасные реализации:

  1. Eager Initialization (создание при загрузке класса):
java
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return INSTANCE;
    }
}
  1. Double-Checked Locking (ленивая инициализация с синхронизацией):
java
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;
    }
}
  1. Enum Singleton (рекомендуемый способ, потокобезопасен от природы):
java
public enum Singleton {
    INSTANCE;
}

Важно избегать синхронизации всего метода getInstance() из-за снижения производительности.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы