|
|
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
MalkoLinge Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Мне кажется, этот вариант хорош, если синглтон простой. А если экземпляр занимает много памяти или удерживает ресурсы, которые сильно влияют на производительность? Т.е. синглтон создастся, но может никогда не понадобиться.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 16:53 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
funikovyuri unicornmirage ваш второй вариант верен и обычно называется двойное проверкой. метод новый делать не обязательно, достаточно написать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Вот как раз этот пример ошибочен и не работает. И вышеуказанные статеечки как раз на эту тему и на грабли эти наступалось много раз разными людями. Проблема в том что oneInst становится не null еще до того как закончилось конструирование объекта. Другая thread берет ентот недоношенный объект и всё вместе улетает в SIGSEGV... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 18:32 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
artgonch MalkoLinge Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Мне кажется, этот вариант хорош, если синглтон простой. А если экземпляр занимает много памяти или удерживает ресурсы, которые сильно влияют на производительность? Т.е. синглтон создастся, но может никогда не понадобиться.... Вообще то это NullPointerException называется. Конечно, ежели можно обойтись статическим конструированием так конечно проще Код: plaintext 1. и никаких synchronized не нужно, но проблема в том что по разным причинам так написать редко удается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2006, 18:42 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
ska funikovyuri unicornmirage ваш второй вариант верен и обычно называется двойное проверкой. метод новый делать не обязательно, достаточно написать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Вот как раз этот пример ошибочен и не работает. И вышеуказанные статеечки как раз на эту тему и на грабли эти наступалось много раз разными людями. Проблема в том что oneInst становится не null еще до того как закончилось конструирование объекта. Другая thread берет ентот недоношенный объект и всё вместе улетает в SIGSEGV... почитал статью... чето у меня большие сомнения на ее счет. кто-нибудь проверял на рабочем коде те утверждения? В спецификации на jvm кажется есть требования атомарности операция над всеми базовыми типами кроме double... т.е. очень интересно не приувеличивают ли гаи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 10:59 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri: ваш вариант неверен, смотрите Effective Java Programming Language Guide (chapter 9, item 48), там все описано подробно. Переделывайте скорее ваши синглтоны :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 12:39 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
funikovyuri почитал статью... чето у меня большие сомнения на ее счет. кто-нибудь проверял на рабочем коде те утверждения? В спецификации на jvm кажется есть требования атомарности операция над всеми базовыми типами кроме double... т.е. очень интересно не приувеличивают ли гаи! На SIGSEGV я сам нарвался на многопроцессорной HP PA-RISC. Для х86 в статьях тоже были фрагменты ассемблерного кода. Конструирование объекта отнюдь не атомарная операция :-)) Что касается атомарности - я бы на long на 32-битных тачках тоже не закладывался, ну и в любом случае без synchronized на разных CPU разные значения получить легко. Если говорить о конкретном примере unicornmirage - он будет работать только потому что класс MySingleton не содержит ни одной динамической переменной. Если он будет содержать только переменные базового типа, то тоже выживем, но значения непредсказуемые получим, ну а уж если ссылки на объекты, то SIGSEGV :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 18:36 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
ska На SIGSEGV я сам нарвался на многопроцессорной HP PA-RISC. Вот бы код приводящий к такой ошибке уведеть ska Конструирование объекта отнюдь не атомарная операция :-)) вы открыли мне глаза... я где-то писал что конструктор это атомарная операция? Насчет же того что переменной присваивается ссылка не еще не сконструированный объект - опять же очень хочу ссылки на примеры и на спецификацию jvm ska Что касается атомарности - я бы на long на 32-битных тачках тоже не закладывался, ну и в любом случае без synchronized на разных CPU разные значения получить легко. Ну вы можете и не закладываться, а так это требования спецификации на jvm авторOU У меня к сожалению этой книги сейчас нет, не могли бы привести выдержки из нее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 19:10 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri: здесь можно скачать книгу, иначе копировать много придется, нехочется форум захламлять лишним. click ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 19:21 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
funikovyuri ska На SIGSEGV я сам нарвался на многопроцессорной HP PA-RISC. Вот бы код приводящий к такой ошибке уведеть Для х86 Jozic уже приводил ИБМовскую ссылку . Смотрите Listing 6. Вообще то это все сильно давешняя история и лично я не знаю ни одной реализации 1.4 где была бы эта плюха - все реализации сначала конструируют а уж затем присваивают ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 20:26 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
ska Вообще то это все сильно давешняя история и лично я не знаю ни одной реализации 1.4 где была бы эта плюха - все реализации сначала конструируют а уж затем присваивают ссылку. вот вот, хотелось бы все выяснить до конца. Есть мнение что это уже давно не актуально... ЗЫ у меня есть куча многопроцессорных боксов и разных jvm - мало только времени.... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2006, 13:19 |
|
||
|
Синхронизация синглетона
|
|||
|---|---|---|---|
|
#18+
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 не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2006, 18:42 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2148487]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
12ms |
get first new msg: |
19ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 554ms |

| 0 / 0 |
