Назад к вопросам
Junior — Middle
67
Обеспечивается ли безопасность потока при использовании шаблона Singleton с областью видимости Scope?
Ответ от нейросети
sobes.tech AI
Шаблон Singleton с областью видимости Scope (например, в контексте Dependency Injection) обычно не гарантирует безопасность потока по умолчанию. Если Singleton создаётся один раз и используется в нескольких потоках, нужно обеспечить потокобезопасность при инициализации и доступе.
В Java для потокобезопасного Singleton часто используют:
- Инициализацию через enum (гарантирует потокобезопасность)
- Инициализацию с помощью
synchronizedилиvolatile - Использование
static finalполя, инициализированного при загрузке класса
Если Scope подразумевает создание экземпляра на каждый запрос или сессии, то Singleton в таком контексте теряет смысл, и потокобезопасность зависит от реализации контейнера.
Пример потокобезопасного Singleton с ленивой инициализацией:
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;
}
}