Social Icons

.

воскресенье, 23 июня 2013 г.

Реализация Singleton в JAVA (JSE)




Основной вариант:

class Singleton{
    private static Singleton instance = new Singleton();
   
    private Singleton(){
    }
   
    public static Singleton getInstance(){
        return instance;
    }
}
+ Нормально работает в многопоточном режиме
-  Нет "ленивой инициализации" (Объект instance будет создан classloader-ом во время инициализации класса)
-  Отсутствует возможность обработки исключительных ситуаций(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 плохо работает в многопроцессорных системах

Комментариев нет:

Отправить комментарий

 

Так говорил Учитель:

У хорошо написанной программы есть свой собственный рай, у плохо написанной — свой собственный ад.

Russian Developer

Взгляд его светел, усилия праведны, старания бесплодны, дело безнадежно ...