A Энергозависимая переменная изменяется асинхронно путем одновременного запуска потоков в приложении Java. Нельзя иметь локальную копию переменной, которая отличается от значения, которое в настоящее время хранится в «основной» памяти. По сути, переменная, объявленная volatile, должна синхронизировать свои данные во всех потоках, чтобы при каждом обращении к переменной или ее обновлении в любом потоке все остальные потоки сразу видели одно и то же значение. Конечно, вполне вероятно, что переменные переменные имеют более высокий уровень доступа и обновления, чем «простые» переменные, поскольку потоки могут иметь свою собственную копию данных для большей эффективности.
Когда поле объявляется как volatile, компилятор и среда выполнения уведомляются о том, что эта переменная является общей и что операции с ней не должны переупорядочиваться с другими операциями с памятью. Изменчивые переменные не кэшируются в регистрах или в кэшах, где они скрыт от других процессоров, поэтому чтение изменчивой переменной всегда возвращает самую последнюю запись любым потоком.
для справки: http://techno -terminal.blogspot.in / 2015/11 / what-are-volatile-variables.html