Проблемы с двумя потоками, обращающимися к часто обновляемому списку массивов

У меня есть списки массивов, в которых хранится много объектов, и объекты часто добавляются и удаляются из списков массивов. Один поток работает со структурами данных и обновляет объекты ArrayList каждые 20 мс или около того. Другой поток просматривает списки ArrayLists и использует их элементы для рисования объектов (также каждые 20-30 мс).

Если обход ArrayLists выполняется с помощью цикла for, исключений IndexOutOfBoundsExceptions очень много. Если ArrayLists просматривается с помощью итераторов, ConcurrentModificationExceptions изобилует. Синхронизация списков ArrayLists выглядит так:


List list = Collections.synchronizedList(new ArrayList());
synchronized(list) {
//use iterator for traversals
}

Не вызывает исключений, но существенно снижает производительность. Есть ли способ пройти по этим спискам ArrayList без исключения исключений и без потери производительности?

СПАСИБО!

5
задан farm ostrich 11 April 2011 в 18:21
поделиться