Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 31

Как исправить ошибку ConcurrentModificationException

20.09.2021, 15:06. Показов 4202. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
Exception in thread "Thread-3" java.util.ConcurrentModificationException
        at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
        at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
        at gh.storage.Storage.add(Storage.java:40)

Storage.java строка 40:
Java
1
2
3
4
5
6
    public void add(PlayerInfo info) {
        ArrayList<PlayerInfo> toRm = new ArrayList<>();
        for(PlayerInfo pi: players){if(pi.uuid.equals(info.uuid)){toRm.add(pi);}}
        toRm.forEach(p->players.remove(p));
        players.add(info);
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2021, 15:06
Ответы с готовыми решениями:

Подскажите, как исправить ошибку?
java: java.lang.ExceptionInInitializerError Unable to make field private...

Выдает ошибку, но не могу понять как ее исправить
import java.util.Scanner; public class L1 { public static void main(String args) { Scanner sc = new Scanner(System.in); ...

Удаление элемента в цикле for(each) выдает ошибку ConcurrentModificationException
знаю что нужно в таких случаях удалять через итератор,но почему то у меня это не работает,исключение все равно выдает,может кто знает в чем...

9
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
20.09.2021, 15:20
Лучший ответ Сообщение было отмечено Игорь_Андреевич как решение

Решение

Цитата Сообщение от Игорь_Андреевич Посмотреть сообщение
Как исправить ошибку ConcurrentModificationException
Цитата Сообщение от Игорь_Андреевич Посмотреть сообщение
ArrayList<PlayerInfo> toRm = new ArrayList<>();
Замени на List<PlayerInfo> toRm = new CopyOnWriteArrayList<>(); либо не меняй состояние списка во время итерации по нему.
1
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 31
20.09.2021, 15:21  [ТС]
А если менять всетаки нужно то какой выход?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
20.09.2021, 16:28
playesr.removeIf(p -> pi.uuid.equals(info.uuid))
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 31
20.09.2021, 19:25  [ТС]

Кажет ошибку.
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 31
20.09.2021, 20:02  [ТС]
Все распишу более детально.

Ошибка:
Java
1
2
3
4
5
6
Exception in thread "Thread-3" java.util.ConcurrentModificationException
        at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
        at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
        at gh.storage.Storage.add(Storage.java:42)
        at gh.net.Server.handle(Server.java:87)
        at gh.net.Server$Reader.run(Server.java:52)
Storage.java:
Java
1
2
3
4
5
6
public void add(PlayerInfo info) {
        List<PlayerInfo> toRm = new CopyOnWriteArrayList<>();
        for(PlayerInfo pi: players){if(pi.uuid.equals(info.uuid)){toRm.add(pi);}}
        toRm.forEach(p->players.remove(p));
        players.add(info);
    }
Сделал как указал @Arsegg
Но ошибка не исчезла.
0
 Аватар для StepFather322
365 / 252 / 113
Регистрация: 07.10.2017
Сообщений: 1,330
20.09.2021, 20:07
Покажи
Цитата Сообщение от Игорь_Андреевич Посмотреть сообщение
players
его, наверное, нужно сделать CopyOnWriteArrayList,а не тот что у тебя в методе
1
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 31
20.09.2021, 20:11  [ТС]
Минуту

Добавлено через 1 минуту
ArrayList<PlayerInfo> players = new ArrayList<>();

вы имеете в виду это?
0
 Аватар для StepFather322
365 / 252 / 113
Регистрация: 07.10.2017
Сообщений: 1,330
20.09.2021, 20:24
Ты меняешь состояние какого то листа, в двух потоках без синхронизации, поэтому получаешь такую ошибку. Кидай весь код что есть, если его не много и опиши что ты пытаешься сделать.
Цитата Сообщение от Игорь_Андреевич Посмотреть сообщение
ArrayList<PlayerInfo> players = new ArrayList<>();
вы имеете в виду это?
Ну так поменяй его на CopyOnWriteArrayList и посмотри что будет. Мы же не будем тут сидеть и угадывать, какой лист и в каких потоках ты меняешь
1
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 31
20.09.2021, 22:20  [ТС]
StepFather322, Поменял, жду когда выскочит ошибка. Кода очень много, буду по мере поступления разных ошибок скидывать код в котором ошибка.

Добавлено через 1 час 54 минуты
Тему можно закрыть. Всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2021, 22:20
Помогаю со студенческими работами здесь

Как коллекции определяют ConcurrentModificationException?
В случае если мы взяли итератор, а потом начинаем менять коллекцию НЕ через него, то итератор проверяет, что коллекция изменилась и...

Как исправить ошибку?
Помогите Пожалуйста! учусь программированию, написал игру, но когда пытаюсь запустить, выдаёт ошибку: at...

Как исправить ошибку?
Как исправить ошибку? import java.io.BufferedReader; import java.io.IOException; import java. io.InputStreamReader; public class...

Как исправить ошибку?
Could not transfer artifact org.slf4j:slf4j-log4j12:jar:1.7.5 from/to central (https://repo.maven.apache.org/maven2):...

Как исправить ошибку?
Пытался сделать калькулятор: public class eHandler implements ActionListener{ public void actionPerformed(ActionEvent e) { if...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru