Junior — Middle
96
Singleton-ты іске асыру көп ағынды ортада жұмыс істегенде қауіпсіздікті қамтамасыз ете ме?
AI-дан жауап
sobes.tech AI
Реализация паттерна Singleton по умолчанию не гарантирует безопасность в многопоточной среде. Если несколько потоков одновременно попытаются создать экземпляр, может возникнуть ситуация, когда будет создано несколько объектов.
Для обеспечения потокобезопасности применяют различные подходы:
- Использование ключевого слова
synchronizedпри создании экземпляра. - Инициализация экземпляра при загрузке класса (eager initialization).
- Использование статического вложенного класса (Initialization-on-demand holder idiom).
- Использование
enumдля реализации Singleton (в Java).
Пример потокобезопасного Singleton с использованием synchronized:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Однако такой подход может снижать производительность из-за синхронизации. Более эффективный способ — двойная проверка блокировки (double-checked locking) с использованием volatile.