|
|
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
Когда объясняют синхронизованные коллекции и зачем они нужны по-моему больше эмоций чем здравого смысла. вот сделали мы что-то типа Код: java 1. Чем это отличается от обычного ArrayList ? что будет если один поток одновременно, скажем, будет добавлять, а другой читать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 11:21 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
questionerКогда объясняют синхронизованные коллекции и зачем они нужны по-моему больше эмоций чем здравого смысла. То есть, если не понятно, то все вокруг истерички? Интересная позиция. questionerчто будет если один поток одновременно, скажем, будет добавлять, а другой читать? Если не использовать итераторы, а только методы коллекций, то в синхронизированой колекции они будут исполнять по очереди. Использование же обычного ArrayList в многопоточном окружении может привести к непредсказуемым результатам. Перечислать все возможные варианты как оно может сломаться бесполезно. Например два потока одновременно добавляют элемент, при этом массив внутри ArrayList необходимо расширить. Это закончиться тем что два потока создадут две копии массива и добавят туда свои элементы. А после присвоения в поле, останется доступным лишь одинм массив. Данные добавленные другим потоком пропадут. Даже без расширения массива, при одновременной записи можно записать два элементы в одну позиуицю. Если же ограничиться тем, что только один поток пишет и только один поток читает, то проблем, конечно будет меньше. Но нельзя сказать что их не будет совсем. Основная проблема в том что читающий поток может не сразу увидеть то что уже записано. Либо при итерации читатель будет рассчитывать на N элементов. А массиве уже будет меньше. Что приведет к выходу за пределы массива. Конечно, же, можно огранизовать чтение и запись таким образом чтобы ничего этого не происходило. Пример такого подхода - циклический буфер. Просто там используются другие механизмы синхронизации. Обычный Collections.synchronized нужен в том случае, если потоки скорее всего конкурировать не будут. Но вероятность того что возможен параллельный доступ не нулевая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 11:45 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczТо есть, если не понятно, то все вокруг истерички? Интересная позиция. я такого не говорил) BlazkowiczЕсли же ограничиться тем, что только один поток пишет и только один поток читает, то проблем, конечно будет меньше. Но нельзя сказать что их не будет совсем. Основная проблема в том что читающий поток может не сразу увидеть то что уже записано. Либо при итерации читатель будет рассчитывать на N элементов. А массиве уже будет меньше. Что приведет к выходу за пределы массива. это про синхронизованный или обычный List ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 12:43 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
questionerя такого не говорил) А какие тогда эмоции? Грусть и печаль? :D questionerэто про синхронизованный или обычный List ? Это про ArrayList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 12:45 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczА какие тогда эмоции? Грусть и печаль? :D типо если использовать в многопоточной среде обычные коллекции - будет ба-бах, ты-дышь и вообще чуть ли не ядерная война начнётся.. BlazkowiczЕсли не использовать итераторы, а только методы коллекций, то в синхронизированой колекции они будут исполнять по очереди. То есть синхронизованные коллекции решают за нас проблемы описанные вами проблемы, но 1. Не спасают от итераторных ConcurrentModificationExcreption? 2. Производительность падает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 13:14 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
questionerтипо если использовать в многопоточной среде обычные коллекции - будет ба-бах, ты-дышь и вообще чуть ли не ядерная война начнётся.. Нет. Просто появится непредсказуемое поведение. Например баги, которые нельзя воспроизвести, соответсвенно нельзя установить их источник. Соответсвенно нет и возможности их исправить. Потому что у юзера они вылазять регулярно, а девелопер на это отвечает "у меня всё работает". questioner1. Не спасают от итераторных ConcurrentModificationExcreption? ConcurrentModificationExcreption к многопоточности отношения не имеет. questioner2. Производительность падает? Зависит от сценария использования и реализации. Например Biased Locking оптимизация делает synchronized почти бесплатным, пока он используется единственным потоком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 13:19 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczConcurrentModificationExcreption к многопоточности отношения не имеет. к потокам доступа к коллекци ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 14:26 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
questionerк потокам доступа к коллекци Это какой-то особый под-вид потоков? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 14:32 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
Лучше для примера взять HashMap. Замените в коде ConcurrentHashMap или Collections.synchronizedMap(..) на простой HashMap. И ждите того момента, когда все потоки, которые как-то этот код с этой мапой используют конкурентно (один делает put, а другой get), застрянут в бесконечных циклах. Конечно находятся люди, которые подобные проблемы решают просто убив сервер, а потом его перезапустив... И никаких проблем с потокобезопасностью в их коде как бы вообще нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 14:32 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
schwaКонечно находятся люди, которые подобные проблемы решают просто убив сервер, а потом его перезапустив... И никаких проблем с потокобезопасностью в их коде как бы вообще нет. Чувствуется что наболело у человека :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 17:11 |
|
||
|
От чего спасают синхронизованные коллекции?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerк потокам доступа к коллекци Это какой-то особый под-вид потоков? :) ну Concurrent же!)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 21:31 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38598331&tid=2127422]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 477ms |

| 0 / 0 |
