![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| light0ff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.1.2006 Где: Латвия, Рига Репутация: нет Всего: нет |
У меня есть форма. При ее закрытии мне необходимо сохранять параметры формы в файл. Делаю это примерно вот так.
При первом создании, когда объект еще не существует, все нормально. При повторном сохранении вылетает исключение (java.util.ConcurrentModificationException) в строчке "FormConfigObject obj = (FormConfigObject) it.next();". В чем может быть проблема? |
|||
|
||||
| Beard |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.7.2005 Где: Санкт-Петербург Репутация: 2 Всего: 9 |
У вас два потока имеют одновременный доступ к коллекции, причем другой (первый - где вы итерируете), по всей вероятности
пытается удалить элеммент. Как написано в документации: This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible. For example, it is not generally permissible for one thread to modify a Collection while another thread is iterating over it. Synchronize поможет |
|||
|
||||
| aefimov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.1.2006 Репутация: нет Всего: нет |
Дело в том, что вы итерируетесь по списку. И в этот момент пытаетесь удались из него что-то, но не средствами итератора, а через саму коллекцию. Пользуйтесь методом delete у java.util.Iterator для корректного удаления во время итерирования.
Добавлено @ 17:38 сорри, метод remove, конечно же. |
|||
|
||||
| light0ff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.1.2006 Где: Латвия, Рига Репутация: нет Всего: нет |
Огромное спасибо;)
|
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Beard,
Простите что подымаю снова тему, но у меня не идут synch-и никак.
что же тут не так? Точнее я знаю что тут не так, ситуация такая: сначала вызывается notifyAuth, первый слушатель обрабатывает сообщение и убивает 2-го слушателя посредством removeAuthListener, все логично было бы если бы я убрал synchronized блоки, но когда они есть, почему все равно проскакивает конкурент? Это сообщение отредактировал(а) Platon - 16.5.2007, 14:25 |
|||
|
||||
| tipoc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 20.3.2004 Репутация: 1 Всего: 1 |
Хех, синхронизация не поможет.
Написано ведь черным по белому:
Методы итератора (если он fail-fast) все равно обнаружат, что ты модифицировал коллекцию в другом потоке вне зависимости от того, сделал ли ты это синхронизировано или нет. |
|||
|
||||
| Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
-------------------- Бонифаций. |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Угу, жестоко поступаю
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |