Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 08.08.2008
Фото: 3
Вопрос касается таких вещей, как CopyOnWriteArrayList и CopyOnWriteArraySet.
Допустим, я хочу создать CopyOnWriteArrayList, который содержит CopyOnWriteArraySet`ы, которые уже содержат какие-то Object`ы.
Есть объект Storage с методом public boolean setObject(n, o), где n - номер Set`a, o - номер объекта. В нём заданный объект добавляется (add) в выбранный Set.
Теперь представим ситуацию, когда много потоков решают одновременно вызвать setObject и положить заведомо разные объекты (hash и equals адекватные, коллизии исключаем) в коллекции.
Вопрос: почему в таком случае объекты иногда просто теряются в процессе добавления?
Тесты показали, что в случае с synchronized SetObject объекты не теряются, но ведь вся фишка этих коллекций, что они должны работать в многопотоке сами по себе.
Расскажите, в каком месте теряются мои Object`ы?
P.S. Пожалуйста, не превращайте тему в обсуждение реализации.

_________________
Была картошка простая - стала золотая, были грибки простые - стали золотые, была рыбка простая - стала золотая. Еле процессоры спасли!



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.06.2008
CopyOnWriteArrayList (и, следовательно, CopyOnWriteArraySet) предполагает, что в определенный момент времени могут хранится две копии данных: та копия, что предназначена для работы модифицирующей операции (типа add) и та копия, с которой работают итераторы. Если вы умудрились изменить вторую копию, воспользовавшись ссылкой, что выдает итератор, то такие изменения пропадут. Поскольку вторая копия существует лишь до тех пор, пока не завершится модифицирующая операция.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  



Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan