Встречается на собеседованиях • сегодня
Как решается проблема потокобезопасности в Singleton
Для потокобезопасности Singleton в Java есть несколько подходов:
- Eager Initialization – объект создаётся при загрузке класса (потокобезопасно, но не лениво):
java
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}- 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;
}
}- Holder Idiom – использует вложенный статический класс (лучший вариант):
java
public class Singleton {
private Singleton() {}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}volatile во втором варианте предотвращает проблемы с видимостью и переупорядочиванием инструкций. Третий вариант предпочтительнее, так как не требует явной синхронизации.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы