powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / От чего спасают синхронизованные коллекции?
12 сообщений из 12, страница 1 из 1
От чего спасают синхронизованные коллекции?
    #38597832
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда объясняют синхронизованные коллекции и зачем они нужны по-моему больше эмоций чем здравого смысла.

вот сделали мы что-то типа
Код: java
1.
List<String> list = Collections.synchronizedList(new ArrayList<String>());



Чем это отличается от обычного ArrayList ?

что будет если один поток одновременно, скажем, будет добавлять, а другой читать?
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38597875
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКогда объясняют синхронизованные коллекции и зачем они нужны по-моему больше эмоций чем здравого смысла.
То есть, если не понятно, то все вокруг истерички? Интересная позиция.

questionerчто будет если один поток одновременно, скажем, будет добавлять, а другой читать?
Если не использовать итераторы, а только методы коллекций, то в синхронизированой колекции они будут исполнять по очереди.
Использование же обычного ArrayList в многопоточном окружении может привести к непредсказуемым результатам. Перечислать все возможные варианты как оно может сломаться бесполезно.
Например два потока одновременно добавляют элемент, при этом массив внутри ArrayList необходимо расширить. Это закончиться тем что два потока создадут две копии массива и добавят туда свои элементы. А после присвоения в поле, останется доступным лишь одинм массив. Данные добавленные другим потоком пропадут.
Даже без расширения массива, при одновременной записи можно записать два элементы в одну позиуицю.

Если же ограничиться тем, что только один поток пишет и только один поток читает, то проблем, конечно будет меньше. Но нельзя сказать что их не будет совсем. Основная проблема в том что читающий поток может не сразу увидеть то что уже записано. Либо при итерации читатель будет рассчитывать на N элементов. А массиве уже будет меньше. Что приведет к выходу за пределы массива.

Конечно, же, можно огранизовать чтение и запись таким образом чтобы ничего этого не происходило. Пример такого подхода - циклический буфер. Просто там используются другие механизмы синхронизации.

Обычный Collections.synchronized нужен в том случае, если потоки скорее всего конкурировать не будут. Но вероятность того что возможен параллельный доступ не нулевая.
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38597963
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

BlazkowiczТо есть, если не понятно, то все вокруг истерички? Интересная позиция.

я такого не говорил)

BlazkowiczЕсли же ограничиться тем, что только один поток пишет и только один поток читает, то проблем, конечно будет меньше. Но нельзя сказать что их не будет совсем. Основная проблема в том что читающий поток может не сразу увидеть то что уже записано. Либо при итерации читатель будет рассчитывать на N элементов. А массиве уже будет меньше. Что приведет к выходу за пределы массива.


это про синхронизованный или обычный List ?
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38597966
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerя такого не говорил)

А какие тогда эмоции? Грусть и печаль? :D

questionerэто про синхронизованный или обычный List ?
Это про ArrayList.
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598017
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
BlazkowiczА какие тогда эмоции? Грусть и печаль? :D
типо если использовать в многопоточной среде обычные коллекции - будет ба-бах, ты-дышь и вообще чуть ли не ядерная война начнётся..
BlazkowiczЕсли не использовать итераторы, а только методы коллекций, то в синхронизированой колекции они будут исполнять по очереди.

То есть синхронизованные коллекции решают за нас проблемы описанные вами проблемы, но
1. Не спасают от итераторных ConcurrentModificationExcreption?
2. Производительность падает
?
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598037
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerтипо если использовать в многопоточной среде обычные коллекции - будет ба-бах, ты-дышь и вообще чуть ли не ядерная война начнётся..

Нет. Просто появится непредсказуемое поведение. Например баги, которые нельзя воспроизвести, соответсвенно нельзя установить их источник. Соответсвенно нет и возможности их исправить. Потому что у юзера они вылазять регулярно, а девелопер на это отвечает "у меня всё работает".


questioner1. Не спасают от итераторных ConcurrentModificationExcreption?
ConcurrentModificationExcreption к многопоточности отношения не имеет.

questioner2. Производительность падает?
Зависит от сценария использования и реализации. Например Biased Locking оптимизация делает synchronized почти бесплатным, пока он используется единственным потоком.
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598134
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

BlazkowiczConcurrentModificationExcreption к многопоточности отношения не имеет.

к потокам доступа к коллекци
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598138
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerк потокам доступа к коллекци
Это какой-то особый под-вид потоков? :)
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598140
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше для примера взять HashMap.

Замените в коде ConcurrentHashMap или Collections.synchronizedMap(..) на простой HashMap.
И ждите того момента, когда все потоки, которые как-то этот код с этой мапой используют конкурентно (один делает put, а другой get), застрянут в бесконечных циклах.

Конечно находятся люди, которые подобные проблемы решают просто убив сервер, а потом его перезапустив... И никаких проблем с потокобезопасностью в их коде как бы вообще нет.
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598331
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaКонечно находятся люди, которые подобные проблемы решают просто убив сервер, а потом его перезапустив... И никаких проблем с потокобезопасностью в их коде как бы вообще нет.

Чувствуется что наболело у человека :)
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598544
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczquestionerк потокам доступа к коллекци
Это какой-то особый под-вид потоков? :)
ну Concurrent же!))
...
Рейтинг: 0 / 0
От чего спасают синхронизованные коллекции?
    #38598560
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

От гонок он спасает.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / От чего спасают синхронизованные коллекции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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