Вопрос проверяет понимание проблем многопоточности и модели памяти Java.
Data race возникает, когда несколько потоков одновременно обращаются к общим данным без синхронизации. Это приводит к непредсказуемому поведению программы. Результат выполнения зависит от порядка выполнения потоков. Ошибки могут проявляться редко и нестабильно. Такие баги сложно воспроизводить и отлаживать.
Data race — одна из самых опасных проблем в многопоточных программах.
Data race возникает, когда:
минимум два потока работают с одной переменной
хотя бы один поток выполняет запись
отсутствует синхронизация
В этом случае поведение программы не определено.
Последствия data race:
чтение некорректных значений
потеря обновлений
нарушение инвариантов
редкие и нестабильные ошибки
Без синхронизации:
изменения могут быть не видны другим потокам
операции могут переупорядочиваться
кэширование и оптимизации ломают ожидания
Основные подходы:
synchronized
volatile
атомарные типы
неизменяемые объекты
Вывод: data race делает поведение программы непредсказуемым и является одной из самых сложных для диагностики ошибок.