Если переменные в Java доступны из нескольких потоков, необходимо убедиться, что они безопасно опубликованы. Обычно это означает использование synchronized
или volatile
.
У меня сложилось впечатление, что некоторые из моих коллег серьезно не относятся к этой проблеме, так как они "никогда не слышали о volatile
раньше и их программы работали годами".
Итак, мой вопрос:
Может ли кто-нибудь предоставить пример Java-программы/фрагмента, который надежно отображает проблемы видимости данных.
Я думаю, что запуск программы и просмотр неожиданного значения NPE или устаревшей переменной помогут больше, чем просто теоретические объяснения, которые не могут быть продемонстрированы.
Большое спасибо за вашу помощь!
Обновление: Просто для того, чтобы снова подчеркнуть этот момент. Я прочитал Java Concurreny на практике и знаю примеры, которые теоретически имеют проблемы с видимостью. Я ищу, чтобы на самом деле продемонстрировать их. Я не уверен, что это действительно возможно, но, возможно, есть конфигурация jvm или что-то подобное, что позволяет это.