Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по многопоточности.

Олег Ивашнев Гуру (4069), на голосовании 4 года назад
Имеется список Integer. Несколько потоков добавляют туда по два числа и реализуют определенный код.
Если одновременно в каких-либо потоках совпали числа (например: 110, 120 и 200, 120) , то второй поток ждет окончания работы с synchronized блоком потока с таким же числом. Подскажите, что указать объектом для такого синхронизированного блока?
synchronized (...?) {
//код
}
Ведь, если укажу имя списка, то монитор будет блокировать весь список и они будут просто по очереди выполнять этот блок кода, верно я понимаю?
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (425007) 4 года назад
Добавление элементов в список в любом случае должно выполняться в какой-то очередности, так что блокируй смело.
Олег ИвашневГуру (4069) 4 года назад
В блоке кода еще выполняются определенные действия, которые отнимают немалое время, а вынести их за блок кода не получится. Поэтому надо реализовать так, что если все числа в потоках разные, то они спокойно многопоточно считают вычисления, но если попалось не уникальное число, то этот поток должен упереться в блокировку и ждать выполнения похожего потока. А вот add можно вынести за блок. Но это не решит проблему.
Похожие вопросы