Уведомления
Очистить всё
Мар 20, 2026 8:51 дп
При реализации многопоточности в высоконагруженном сервисе столкнулся с неочевидным поведением ConcurrentHashMap в Java 11: при использовании метода computeIfAbsent в условиях интенсивной конкуренции потоков возникают дедлоки, что связано с тем, что реализация этого метода в версиях до Java 9 была неатомарной и могла блокировать сегменты карты дольше ожидаемого, если функция отображения выполняла тяжелые операции или рекурсивно обращалась к той же мапе; решение проблемы — либо замена на отдельную проверку get и последующую вставку через putIfAbsent в цикле, либо миграция на Java 17, где этот баг исправлен на уровне JVM.
