Sobes.tech
Junior — Middle

Какви методи могат да се използват, за да се избегне изключението ConcurrentModificationException при работа с колекции в многопоточна среда?

sobes.tech AI

Отговор от AI

За да избегнете изключението ConcurrentModificationException при работа с колекции в среда с множество нишки, можете да използвате следните методи:

  • Използвайте нишково безопасни колекции от пакета java.util.concurrent, например, ConcurrentHashMap, CopyOnWriteArrayList.
  • Синхронизирайте достъпа до колекцията ръчно с помощта на блокове synchronized или други механизми за синхронизация.
  • Използвайте итератори, които поддържат безопасна модификация, например, ListIterator за списъци.
  • Създавайте копия на колекциите за итерация (например, чрез new ArrayList<>(оригиналенСписък)), за да избегнете промени в оригиналната колекция по време на обхождане.

Пример за използване на CopyOnWriteArrayList:

CopyOnWriteArrayList<String> списък = new CopyOnWriteArrayList<>();
списък.add("item1");
for (String item : списък) {
    списък.add("item2"); // няма да предизвика ConcurrentModificationException
}