Я использую Vector
вместо ArrayList
, чтобы сделать список безопасным в многопоточном окружении. Но я продолжаю получать ConcurrentModificationException
, когда пытаюсь добавить элементы в Vector
, итерации. Почему это и как я могу это предотвратить?Я использовал синхронизированный список, и я все еще получаю ConcurrentModificationException
ответ
Вы не можете изменять вектор, итерации по нему. Сохраните элементы, которые нужно добавить в отдельный вектор, и переместите их в вектор, когда цикл закончен, или переверните копию исходного вектора.
ДОБАВЛЕНО: Чтобы получить мьютекс вокруг вектора в Java, сделать это в обеих функциях:
synchronized (list) {
// modifying list
}
и:
synchronized (list) {
// iterating over list
}
Конечно, я предположил, что список назван list
Если вы хотите добавить элементы, как вы итерации, вы хотите использовать ListIterator
. используя Vector
, вы не обходите это правило (очевидно), поэтому я бы рекомендовал вместо этого использовать ArrayList
.
Если вам нужно повторить и добавить одновременно к вашему списку, вы должны использовать параллельный список, такой как CopyOnWriteArrayList
. Обратите внимание: если вы много напишете в списке, это будет не очень эффективно.
В противном случае, если вы используете вектор или синхронизированный список, вам необходимо удерживать блокировку списка во время итерации. Это предотвратит исключение, но также предотвратит параллелизм ...
- 1. Почему я использовал синхронизированный список и все еще получаю ConcurrentModificationException
- 2. Почему я все еще получаю stackoverflow, даже если я использовал хвостовую рекурсию в OCaml?
- 3. Почему я все еще получаю приглашение?
- 4. Почему я все еще получаю System.NotSupportedException
- 5. Почему я все еще получаю ошибку invalid_client?
- 6. Почему я все еще получаю панель перемещения?
- 7. Почему я все еще получаю эти ошибки?
- 8. Почему я все еще получаю ошибку NumberFormatException?
- 9. Я intalled node.js, почему я все еще получаю ошибку?
- 10. я не инициализировать переменную пока я все еще получаю выход
- 11. Я использовал правильный синтаксис jquery, но все еще не работает?
- 12. Почему я получаю исключение ConcurrentModificationException, хотя я ничего не редактирую?
- 13. Почему я получаю ConcurrentModificationException, хотя я использую блокировки?
- 14. Java и синхронизированный связанный список
- 15. Где я должен использовать синхронизированный?
- 16. Я получаю следующую ошибку с угловыми фабриками, которые я использовал
- 17. я использовал Oracle10gDialect, но я получаю сообщение об ошибке
- 18. Почему я все еще получаю java.lang.NoClassDefFoundError: android.support.v7.appcompat.R $ attr?
- 19. Почему я все еще получаю установку репозитория для ошибки RecyclerView?
- 20. Эта модель кажется исчерпывающей, но я все еще получаю предупреждение
- 21. еще одно ConcurrentModificationException
- 22. UnsatisfiedLinkError: Библиотечные нагрузки, но я все еще получаю ошибку ссылку
- 23. Неправильный классный путь? Почему я все еще получаю NoClassDefFoundError?
- 24. Мой синтаксис верен, но я все еще получаю ошибку
- 25. Почему я получаю OutOfMemory, когда 20% кучи все еще бесплатно?
- 26. Почему я все еще получаю кодовые контракты: Обеспечьте недоказанное предупреждение?
- 27. ПараметрNotFoundException удален, но я все еще получаю ошибку?
- 28. Когда я использовал TPH, все таблицы воссозданы
- 29. Почему я получаю пустой список?
- 30. Список ConcurrentModificationException
параллельный! = Параллельный. Вы можете получить исключение ConcurrentModificationException одним потоком. –