Ржевский Дмитрий Rzhevskiy Dmitry

среда сен 16, 2009

Singleton и AtomicReference

Сегодня в интернете обнаружил прикольную вещь

классический Singleton 

public final class Singleton {
private static Singleton _instance = null;

private Singleton() {}

public static synchronized Singleton getInstance() {
if (_instance == null)
_instance = new Singleton();
return _instance;
}


}


В комментах к статье http://www.javenue.info/post/2 Более новую и быструю реализацию через AtomicReference

 

public class Singleton {
  private static final AtomicReference SINGL_REF = new AtomicReference();


   private Singleton() {
  
}


   public static final Singleton getInstance() {
    
if (SINGL_REF.get() == null) {
       SINGL_REF.compareAndSet(null, new Singleton());
    
}
     
return SINGL_REF.get();
  
}

}

 

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

if (SINGL_REF.get() == null)
а зачем вот ета проверка нужна ?

типа эта штука
SINGL_REF.compareAndSet(null, new Singleton());
если там нулл, то установит новый а если не нулл, ничо не будет делать..
мне так кажется..

опубликовал a2ego Сентябрь 16, 2009 at 11:06 PM MSD #

у меня предположение что это для перфоманса

опубликовал Дима Сентябрь 17, 2009 at 01:07 AM MSD #

А ещё прикольная реализация есть для AspectJ.
Вся функциональность выносится в отдельный аспект. Класс который ты хочешь сделать синглтоном помечаешь аннотацией @Singleton и всё.

http://www.christianschenk.org/blog/singletons-with-aspectj/

опубликовал Дима Сентябрь 17, 2009 at 01:21 AM MSD #

А еще есть Spring по умолчанию singleton="true"

опубликовал maxm165 Сентябрь 17, 2009 at 10:47 PM MSD #

maxm165, в спринге синглтон - не настоящий синглтон а только а уровне контекста. А контекстов создать можно много.
Ну а то что ты мне jabber написал - верно: Вражение if (SINGL_REF.get() == null) здесь совершенно обязательно - иначе н каждый вызов getInstance создавался новый инстанс снглтона и удалялся сборщиком мусора.
И в текущей реализации есть вероятность что во время инициализации будет существоваь несклько инстансов синглтона.

опубликовал Дима Сентябрь 18, 2009 at 12:55 AM MSD #

Опубликовать комментарий:
  • HTML Syntax: Подключен
Дмитрий Ржевский

Тэги:
cloud eagle experiments hadoop jelastic jelastic.com livejournal paraglider вычисления облако облачные орёл параплан

Calendar



Google Friend Connect.
Возможно через несколько лет не будет отдельных социальных сетей.
Они объединятся в одну открытую и распределённую систему.
Друзья Нравится

Feeds

Search

Links

Navigation


  • Я в ЖЖ    
  • MirTesen.ru
  • Я в "Linked In"

  • Мои друзья
  • Алекслёха
  • Latron

  • Links:
    log4j.ru
    Apache Maven
    моё родовое имение
    Виндсёрфинг


    Моё резюме
    My resume


    XFN Friendly

    Поиск