powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ConcurrentModificationException.
13 сообщений из 13, страница 1 из 1
ConcurrentModificationException.
    #38738062
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу оговорюсь, что знаю: ConcurrentModificationException и многопоточность связаны мало.

Был такой вопрос на собеседовании (не я был, поэтому у спрашивающего и не спросил, а тут пишу).

В одном потоке добавляем в ArrayList элементы, в другом - ходим итератором поэтому же списку.

Что будет?

В общем интервьювер хотел услышать ответ ConcurrentModificationException. Собственно он его и получил.

А я собственно, услышав эту историю, подумал, что а с какого фига будет обязательно ConcurrentModificationException.

Когда он вылетает? когда итератор видит, что его запомненное(при вызове метода iterator на листе) число модификаций и число модификаций на момент итерирования на листе не совпадают. Ведь не факт, что эта переменная volatile - смотрю в код, а она и действительно не volatile.

Я что-то упустил и интервьювер прав или всё-таки мои рассуждения верны?
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738064
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
100% корректным ответом будет: "поведение не определено". То есть будет что-то, но хз, что именно. Может быть все отработает нормально. Может быть свалится ConcurrentModificationException, а может быть вы вообще получите черт знает что.
Это следует из того, что, как вы правильно заметили, в ArrayList нету никакой синхронизации. А потому нет никаких гарантий, что один поток будет видеть происходящие параллельно изменения из другого потока.
Но все же, в 99,9% случае будет банальный ConcurrentModificationException. Воспринимайте его как попытку разработчиков JVM пусть и не гарантированно, но все же с достаточно высокой вероятностью, предупредить вас о неправильном использовании ArrayList.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738083
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Ну "поведение не определено" - это скоре к C++, в джаве достаточно строгая модель памяти. Запись в несинхронизированные поля атомарна (кроме лонгов - они могут писаться по 32 бита), а видимость определяется по happens-before. Остальное - чистая правда.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738085
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfcdtyjv,
Ну "поведение не определено" - это скоре к C++, в джаве достаточно строгая модель памяти. Запись в несинхронизированные поля атомарна (кроме лонгов - они могут писаться по 32 бита), а видимость определяется по happens-before. Остальное - чистая правда.Ну в том то и дело, что видимость между потоками в ArrayList нет, так как в нем нету примитивов синхронизации => нету happens-before.
Недавно читал забавный древний баг-репорт когда HashMap сваливалась в бесконечный цикл при ее конкурентной модификации и сериализации. Это и есть то, что я называю "поведение неопределенно". И неопределенность эта может быть вызвана, как проблемами видимости, так и банальными race condition.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738151
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfНу "поведение не определено" - это скоре к C++, в джаве достаточно строгая модель памяти. Запись в несинхронизированные поля атомарна (кроме лонгов - они могут писаться по 32 бита), а видимость определяется по happens-before. Остальное - чистая правда.
Что за бред. Для не синхронизированых структур поведение при многопоточной записи\чтении не предсказуемо. При чем здесь модель памяти???
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738179
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Вот вам познавательная статья:
http://habrahabr.ru/company/golovachcourses/blog/221133/
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738182
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfВот вам познавательная статья:
http://habrahabr.ru/company/golovachcourses/blog/221133/
Не нужно грубить мне в пятницу. Иван, конечно, молодец. Но материалы делает целенаправленно для начинающих. Если вы не понимаете то что написано в статье, то ваше тыкание в неё выглдятит вот так:
YouTube Video
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738218
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

По вашему "причем здесь модель памяти?" я решил, что вы незнакомы с этой концепцией, вот и выбрал материал для начинающих. Вопрос действительно звучит странно, т.к. гарантии, которые дает java при многопоточном исполнении кода, описаны именно в этом документе.

К тому же, выражение "что за бред" - это фирменное выражение DBA, откуда им знать про JMM :-)
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738224
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfПо вашему "причем здесь модель памяти?" я решил, что вы незнакомы с этой концепцией, вот и выбрал материал для начинающих. Вопрос действительно звучит странно, т.к. гарантии, которые дает java при многопоточном исполнении кода, описаны именно в этом документе.
Ну, то есть вы знаете при чем здесь модель памяти. Но пояснить не можете?

scfК тому же, выражение "что за бред" - это фирменное выражение DBA, откуда им знать про JMM :-)
Ок. Вопросов больше не имею.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738225
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу повторить, что UD (undefined behaviour) - это термин из стандарта С++, где компилятор *действительно* может делать что угодно. Java - это скорее "unspecified behaviour", т.к. при при работе с несинхронизированными данными вполне можно предсказать все возможные исходы.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738240
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Стало интересно, посмотрел ваши другие посты. Вроде адекватный, опытный человек. Разверните тогда свою мысль про бред?

Насколько я помню, JMM гарантирует атомарность обновления большей части полей (кажись, кроме только лонга), поэтому при многопоточном исполнении без синхронизации неопределенным будет только порядок операций и видимость их результатов. Что на undefined behaviour не тянет.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738257
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfнеопределенным будет только порядок операций и видимость их результатов
"Поведение" это и есть операции и порядок их выполнения.

scfЧто на undefined behaviour не тянет.
Вы взяли фразу. Решили что она является термином. И спорите с тем что этот термин применим к Java.
"поведение не определено", это ответ на вопрос "Что будет?". Вполне точный.
Если вам не нравится, фраза и вы знаете точный и правильный термин, то и ссылку надо приводить на ваш термин и его определение.
Например, вышеуказаный
http://en.wikipedia.org/wiki/Unspecified_behavior
Тоже никакого отношения к вопросу не имеет.
...
Рейтинг: 0 / 0
ConcurrentModificationException.
    #38738266
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf ,

Слушайте, вы приводите сслыки на статьи по JMM, а сами же ее и не понимаете. Зачем, по-вашему, нужно ключевое слово volatile, если на 64-битной платформе все записи и чтения, включая long и double, итак уже атомарны? А затем, что у Java нет строгой модели памяти, а следовательно не гарантирована видимость чтений и записей. Если вы записали в переменную сначала 1, потом 2, а потом 3, то другой поток может вернуть вам любое из этих значений в отсутствие синхронизации. Модель памяти это допускает. Из-за этого и возникает непредсказуемое поведение.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ConcurrentModificationException.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]