Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Lazy Singleton в Java
Lazy Singleton — это паттерн, при котором экземпляр класса создаётся не при загрузке класса, а при первом обращении к нему. Это экономит ресурсы, если синглтон никогда не используется.
Проблема: Eager Singleton
public class EagerSingleton {
public static final EagerSingleton INSTANCE = new EagerSingleton();
private EagerSingleton() {
System.out.println("Singleton создан");
}
}
Решение 1: Synchronized Double-Checked Locking
Классический подход с синхронизацией:
public class LazySingleton {
private static volatile LazySingleton instance;
private LazySingleton() { }
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
Решение 2: Holder Pattern (Рекомендуемое)
public class LazySingleton {
private LazySingleton() { }
private static class SingletonHolder {
private static final LazySingleton INSTANCE = new LazySingleton();
}
public static LazySingleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
Решение 3: Enum Singleton
public enum LazySingleton {
INSTANCE;
private String data = "Some data";
public void doSomething() {
System.out.println("Делаю что-то");
}
}
public class Main {
public static void main(String[] args) {
LazySingleton singleton = LazySingleton.INSTANCE;
singleton.doSomething();
}
}
Решение 4: Spring Bean
@Component
public class ConfigService {
public void configure() {
System.out.println("Configuring");
}
}
Тестирование Lazy Singleton
@Test
public void testLazySingletonIsCreatedOnce() {
LazySingleton instance1 = LazySingleton.getInstance();
LazySingleton instance2 = LazySingleton.getInstance();
assertSame(instance1, instance2);
}