Основной вариант:
class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
+ Нормально работает в многопоточном режиме
- Нет "ленивой инициализации" (Объект instance будет создан classloader-ом во время инициализации класса)
- Отсутствует возможность обработки исключительных ситуаций(exceptions) во время вызова конструктора.
- Отсутствует возможность обработки исключительных ситуаций(exceptions) во время вызова конструктора.
"Умный" вариант
class Singleton{
private static volatile Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null)
synchronized(Singleton.class){
if(instance == null)
instance = new Singleton();
}
return instance;
}
}
+ Со всех точек зрения правильный и корректный вариант
- volatile плохо работает в многопроцессорных системах
Комментариев нет:
Отправить комментарий