Есть ли в Java структура данных, которая поддерживает параллельную модификацию? - PullRequest
2 голосов
/ 26 ноября 2011

Я делаю игру на Java.Каждый враг в игре - это нить, и они постоянно перебирают структуры данных игры (я всегда использую класс Vector).

В последнее время я получаю "ConcurrentModificationException", потому что элемент добавляется / удаляется из вектора, пока поток проходит по нему.Я знаю, что есть стратегии, позволяющие избежать проблемы добавления / удаления (я на самом деле использую некоторые, чтобы избежать проблем с удалением, но у меня все еще есть проблемы с «Добавлениями»).

Я слышал, что java поддерживает Vector / List, что позволяет избежать исключения ConcurrentModificationException.

Есть ли у вас какие-либо представления о том, какой может быть эта структура?Спасибо.

Ответы [ 2 ]

6 голосов
/ 26 ноября 2011

Проверьте java.util.concurrent , он имеет то, что вы ищете.

4 голосов
/ 26 ноября 2011

CopyOnWriteArrayList . Но внимательно прочитайте его javadocs и подумайте, дает ли он на практике ожидаемое поведение (проверьте эффекты согласованности памяти), а также стоит ли повышать производительность. Помимо синхронизации с ReentrantReadWriteLock , AtomicReferences и Collections.synchronizedList может помочь вам.

...