powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация синглетона
11 сообщений из 36, страница 2 из 2
Синхронизация синглетона
    #33895287
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MalkoLinge
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ublic  class  SigletonFactory {
	 private   static  Object object;
	 static  {
		 synchronized  (object) {
			object =  new  Object();

		}
	}	
	 private  SigletonFactory() {	}
	 public  Object getInstance(){
		 return  object;
	}
	

}


Мне кажется, этот вариант хорош, если синглтон простой. А если экземпляр занимает много памяти или удерживает ресурсы, которые сильно влияют на производительность? Т.е. синглтон создастся, но может никогда не понадобиться....
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33895597
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri unicornmirage
ваш второй вариант верен и обычно называется двойное проверкой. метод новый делать не обязательно, достаточно написать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 class  MySingleton {
 private   static  MySingleton oneInst =  null ;

 public   static  getInstance() {
   if  (oneInst== null ) {
     synchronized  ( this ) {
           if  (oneInst== null )
             oneInst =  new  MySingleton();
    }

  }

     return  oneInst;
  }
}
вообще решение классическое


Вот как раз этот пример ошибочен и не работает. И вышеуказанные статеечки как раз на эту тему и на грабли эти наступалось много раз разными людями.
Проблема в том что oneInst становится не null еще до того как закончилось конструирование объекта. Другая thread берет ентот недоношенный объект и всё вместе улетает в SIGSEGV...
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33895630
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artgonch MalkoLinge
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ublic  class  SigletonFactory {
	 private   static  Object object;
	 static  {
		 synchronized  (object) {
			object =  new  Object();

		}
	}	
	 private  SigletonFactory() {	}
	 public  Object getInstance(){
		 return  object;
	}
	

}


Мне кажется, этот вариант хорош, если синглтон простой. А если экземпляр занимает много памяти или удерживает ресурсы, которые сильно влияют на производительность? Т.е. синглтон создастся, но может никогда не понадобиться....

Вообще то это NullPointerException называется.

Конечно, ежели можно обойтись статическим конструированием так конечно проще
Код: plaintext
1.
	 private   static  SigletonFactory object =  new  SigletonFactory();

и никаких synchronized не нужно, но проблема в том что по разным причинам так написать редко удается.
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33896516
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska funikovyuri unicornmirage
ваш второй вариант верен и обычно называется двойное проверкой. метод новый делать не обязательно, достаточно написать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 class  MySingleton {
 private   static  MySingleton oneInst =  null ;

 public   static  getInstance() {
   if  (oneInst== null ) {
     synchronized  ( this ) {
           if  (oneInst== null )
             oneInst =  new  MySingleton();
    }

  }

     return  oneInst;
  }
}
вообще решение классическое


Вот как раз этот пример ошибочен и не работает. И вышеуказанные статеечки как раз на эту тему и на грабли эти наступалось много раз разными людями.
Проблема в том что oneInst становится не null еще до того как закончилось конструирование объекта. Другая thread берет ентот недоношенный объект и всё вместе улетает в SIGSEGV...

почитал статью... чето у меня большие сомнения на ее счет. кто-нибудь проверял на рабочем коде те утверждения? В спецификации на jvm кажется есть требования атомарности операция над всеми базовыми типами кроме double... т.е. очень интересно не приувеличивают ли гаи!
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33896888
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 funikovyuri:
ваш вариант неверен, смотрите Effective Java Programming Language Guide (chapter 9, item 48), там все описано подробно. Переделывайте скорее ваши синглтоны :)
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33898344
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri
почитал статью... чето у меня большие сомнения на ее счет. кто-нибудь проверял на рабочем коде те утверждения? В спецификации на jvm кажется есть требования атомарности операция над всеми базовыми типами кроме double... т.е. очень интересно не приувеличивают ли гаи!

На SIGSEGV я сам нарвался на многопроцессорной HP PA-RISC.
Для х86 в статьях тоже были фрагменты ассемблерного кода.
Конструирование объекта отнюдь не атомарная операция :-))
Что касается атомарности - я бы на long на 32-битных тачках тоже не закладывался, ну и в любом случае без synchronized на разных CPU разные значения получить легко.

Если говорить о конкретном примере unicornmirage - он будет работать только потому что класс MySingleton не содержит ни одной динамической переменной. Если он будет содержать только переменные базового типа, то тоже выживем, но значения непредсказуемые получим, ну а уж если ссылки на объекты, то SIGSEGV :-))
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33898403
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska
На SIGSEGV я сам нарвался на многопроцессорной HP PA-RISC.

Вот бы код приводящий к такой ошибке уведеть

ska
Конструирование объекта отнюдь не атомарная операция :-))

вы открыли мне глаза... я где-то писал что конструктор это атомарная операция? Насчет же того что переменной присваивается ссылка не еще не сконструированный объект - опять же очень хочу ссылки на примеры и на спецификацию jvm


ska
Что касается атомарности - я бы на long на 32-битных тачках тоже не закладывался, ну и в любом случае без synchronized на разных CPU разные значения получить легко.

Ну вы можете и не закладываться, а так это требования спецификации на jvm


авторOU
У меня к сожалению этой книги сейчас нет, не могли бы привести выдержки из нее?
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33898416
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 funikovyuri:

здесь можно скачать книгу, иначе копировать много придется, нехочется форум захламлять лишним. click
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33898499
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri ska
На SIGSEGV я сам нарвался на многопроцессорной HP PA-RISC.

Вот бы код приводящий к такой ошибке уведеть


Для х86 Jozic уже приводил
ИБМовскую ссылку . Смотрите Listing 6.

Вообще то это все сильно давешняя история и лично я не знаю ни одной реализации 1.4 где была бы эта плюха - все реализации сначала конструируют а уж затем присваивают ссылку.
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33899668
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska
Вообще то это все сильно давешняя история и лично я не знаю ни одной реализации 1.4 где была бы эта плюха - все реализации сначала конструируют а уж затем присваивают ссылку.
вот вот, хотелось бы все выяснить до конца. Есть мнение что это уже давно не актуально...


ЗЫ у меня есть куча многопроцессорных боксов и разных jvm - мало только времени.... :)
...
Рейтинг: 0 / 0
Синхронизация синглетона
    #33900756
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri
вот вот, хотелось бы все выяснить до конца. Есть мнение что это уже давно не актуально...

Поддерживаю это мнение, хотя могу утверждать лишь то что на последних 1.4.2 на следующих платформах это не проявлялось: hpux pa-risc 11.11, hpux ia64 11.23, ibm aix 5.3, sparc solaris 9, win32, win-x64, win-ia64, as/400, ibm z/os.

С другой стороны от шаловливых ручек реализаторов JIT никто не застрахован, так что "береженого Бог бережет" ((C) Copyright Монашка)

Лично я на такого рода неприятности нарывался на pa-risc и rs6000 оба jdk1.2.
До этого (jdk 1.0.2, 1.1.7, 1.1.8) все работало, после 1.2 до 1.4.2 не проверял.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация синглетона
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]