Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> java.util.ConcurrentModificationException 
:(
    Опции темы
Anton Vatchenko
Дата 17.5.2007, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Я в разных потоках работаю с HashMap, в одном меняю, в другом итерирую. Где-то прочитал, что HashMap fail-safe, и решил, что ошибок не бывает... Но в цикле выскакивает экзепшн:

Код

                    Iterator it = CellCity.connection.keySet().iterator();

                    while (it.hasNext()) {
                        try {
                            Client client2 = (Client) CellCity.connection
                                    .get(it.next()); // это 403 строка
                            client2.sendText(2, client.nick + ": " + text);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }


java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
        at java.util.HashMap$KeyIterator.next(HashMap.java:827)
        at Database.sendText(Database.java:403)
        at ClientLogic.text(ClientLogic.java:31)
        at Client.run(Client.java:210)


что делать?


--------------------
user posted image
PM MAIL   Вверх
Бонифаций
Дата 17.5.2007, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



ConcurrentHashMap.html

Это сообщение отредактировал(а) Бонифаций - 17.5.2007, 08:36


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Anton Vatchenko
Дата 17.5.2007, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



А если вместо итератора использовать keySet().toArray(), не будет вылетать?


--------------------
user posted image
PM MAIL   Вверх
tipoc
Дата 17.5.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 20.3.2004

Репутация: 1
Всего: 1



Когда ты итерируешь по коллекции, ты не можешь в это же время модифицировать коллекцию, только через метод add() класса Iterator (в классе ListIterator также есть метод remove()), иначе возникает ConcurrentModificationException.

Вот что написано в документации к классу ConcurrentModificationException:
Цитата

it is not generally permissible for one thread to modify a Collection while another thread is iterating over it

PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.