Что делает 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.

Проверьте себя после изучения темы

Бесплатный бот с тестами и практическими заданиями по Kotlin.

  • 22 бесплатных урока
  • Тесты к каждому уроку (всего 220 вопросов)
  • Задачи в рамках практики KotlinSprint (120 задач) и курсовой проект «Телеграм бот для изучения иностранных слов»
Начать обучение

Вам также может быть интересно

Узнать подробнее
Курс AndroidSprint

Глубокое обучение Android разработке с 0 до получения оффера. Только персональная практика с гарантией получения продуктового опыта.

Узнать подробнее
Узнать подробнее
Практикум по Kotlin

Изучение Котлин с 0 для профессиональной разработки. Личный ментор и разбор кода задач через git-flow.

Узнать подробнее
Узнать подробнее
Бесплатные уроки по Kotlin разработке

Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.

Узнать подробнее
Узнать подробнее
Onboarding в разработку

Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь

Узнать подробнее
Узнать подробнее
Обучающий Kotlin телеграм бот (с тестами)

Ваш основной инструмент для изучения основ языка. Бесплатные тесты и практика внутри.

Узнать подробнее
Узнать подробнее
Бесплатные уроки по Android разработке

Самостоятельное обучение разработке Андроид приложений. Понятные видеоуроки с разжеванными примерами.

Узнать подробнее
Узнать подробнее
Курс по UI/Unit тестированию

Для ручных тестировщиков, которые готовы осваивать автотесты с использованием актуального стека технологий. [в разработке]

Узнать подробнее
Узнать подробнее
Обучающий Android телеграм бот (с тестами)

Бесплатные теоретические тесты для самопроверки. А также информер на практических спринтах по Android.

Узнать подробнее