|
|
|
Небезопасные синглтоны.
|
|||
|---|---|---|---|
|
#18+
Можете привести несколько примеров небезопасных синглтонов в многопоточной среде, которые на первый взгляд кажутся безопасными и объяснить почему они небезопасные. Которые будут работать для малого числа потоков и будут ломаться на большом числе потоков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2015, 00:34 |
|
||
|
Небезопасные синглтоны.
|
|||
|---|---|---|---|
|
#18+
questioner, Я знаю только 1 вариант подходящий под описание. class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) { synchronized(this) { if (helper == null) { helper = new Helper(); } } } return helper; } } Это на первый взгляд нормальный дабл чек синглтон. Но согласно джава мемори модел он может работать некорректно так как private Helper helper = null; не объявлен volatile. Это согласно спецификации, но я не уверен, что на современном процессоре удастся получить ошибочное поведение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2015, 10:34 |
|
||
|
Небезопасные синглтоны.
|
|||
|---|---|---|---|
|
#18+
Mad_Head, Да, пример подходит) надо ещё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2015, 20:07 |
|
||
|
Небезопасные синглтоны.
|
|||
|---|---|---|---|
|
#18+
questioner, Баян же: http://habrahabr.ru/post/129494/ http://habrahabr.ru/post/27108/ http://shipilev.net/blog/archive/safe-publication/ Ну, и та самая статья с которой всё началось http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2015, 19:05 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=122&tid=2125087]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 414ms |

| 0 / 0 |
