Я получаю ошибку ConcurrentModificationException в следующей ситуации. Линия
место, где это происходит, помечено как "<-------- ConcurrentModificationException" </p>
У меня есть основной поток, который читает из списка следующим образом:
List<ThemeCacheIndex> list = Collections.synchronizedList(themeCacheList);
synchronized (list) {
Iterator<ThemeCacheIndex> it = list.iterator();
while (it.hasNext()) {
ThemeCacheIndex themeCacheIndex = it.next(); <-------- ConcurrentModificationException
doSomething();
}
}
У меня есть AsyncTask, который удаляет из этого списка:
@Override
protected String doInBackground(String... params) {
someElementsToRemove = calculateWhichElementsToRemove();
for(int i=0 ; i < someElementsToRemove.size() ; i++){
themeCacheList.remove(someElementsToRemove.get(i));
}
}
Я могу себе представить, что это происходит в параллельной ситуации, но я решил предотвратить это с помощью синхронизированного списка в главном потоке.
Кажется, я не понял концепцию многопоточности и общих объектов.
Может кто-нибудь помочь мне выйти из этой проблемы? Как я могу предотвратить этот конфликт?