Что делает volatile?
Ключевое слово volatile применяют при разработке многопоточных приложений. Оно оказывает 2 эффекта.
Во-первых, чтение или запись данных в поле, обозначенное этим модификатором, становится атомарным.
Во-вторых, между пара связанных событий запись и чтение имеют отношение happens-before (то есть второе действие в курсе изменений, сделанных первым событием).
Чтобы лучше разобраться, рассмотрим следующий код:
int a, b;
// первый поток:
a = 1;
b = 2;
// второй поток
System.out.print(b);
System.out.print(a);
В результате работы, программа может выдать следующие результаты:
- 21 – сначала отработал первый поток, а потом второй;
- 00 – сначала отработал второй поток, а потом первый;
- 01 – второй поток отработал между командами первого.
Но возможен также и непрогнозируемый результат – 20. Это связано с тем, что для внутри потока действует принцип program order, который гарантирует только видимость заданной последовательности выполнения команд. Чтобы избежать таких неожиданных результатов используется модификатор volatile, который гарантирует выполнение отношения happens-before.
AI-ментор знает весь ваш код
AI Sprints — обучение профессиям с ИИ
AI-ментор помнит каждую вашу задачу и весь прогресс. Даёт подсказки в контексте урока, а не общие ответы из интернета
- Контекст 24/7: ИИ видит весь ваш путь обучения и код — помогает именно с вашей задачей
- Учит думать: подсказки, а не готовые решения — развиваете навык решения проблем
- Треки: Android, Backend, QA — от нуля до Junior за 10 месяцев
AI Challenge — собери чат-бота за 5 дней
Бесплатный марафон по AI-инжинирингу. Cursor + OpenAI, 60 минут в день — без опыта в программировании. К пятнице у вас будет рабочий чат-бот с памятью в браузере.
- Практика с первого дня, без теории «в стол»
- Готовый проект в портфолио к концу недели
- Старт в любой день — учитесь в своём темпе