Оглавление:
Определение - Что означает Volatile?
Volatile - это ключевое слово в языке программирования Java, которое указывает, что переменная-член, связанная с классом, может асинхронно изменяться несколькими потоками. Ключевое слово volatile в коде действует как модификатор при объявлении члена. Ключевые слова - это принципиально зарезервированные слова с определенным значением в контексте компилятора.
Ключевое слово volatile используется всякий раз, когда переменная обозначает некоторую переменную, которая зависит от среды или системы, например, простые счетчики и часы.
Техопедия объясняет изменчивость
Ключевое слово volatile гарантирует, что каждый доступ для чтения к переменной-члену возвращает ее самое последнее значение. Это не эффективно, если последние изменения сделаны с использованием другого потока. Если переменная-член не объявлена как volatile, поток не сможет распознать изменения, внесенные в него, используя другой поток.
Для двойного или длинного члена ключевое слово volatile также гарантирует, что виртуальная машина не будет генерировать две последовательные 32-разрядные записи, но вместо этого создаст только одну 64-разрядную запись. Если это невозможно, реализация JVM продолжает обеспечивать атомарность этой функции, чтобы старая нижняя половина не читалась с новой более высокой половиной некоторого изменчивого типа double или long.
Изменчивые операции записи и чтения устанавливают отношения «происходит до того». Перед обращением к энергозависимому объекту происходит синхронизация между основной памятью и кэшированными переменными, как это происходит до входа или после выхода из синхронизированного блока. Это подразумевает, что энергозависимый объект может быть безопасно опубликован без синхронизации; то есть когда поток получает доступ к изменчивому объекту, члены этого объекта также обновляются.
Когда переменная описывается как volatile, JVM и компилятор Java выполняют следующие две вещи.
- Компилятору не удается максимизировать операторы и выражения, связанные с этой переменной.
- JVM синхронизирует переменную.
Преимущества volatile следующие:
- Это легкий
- Это приводит к очень небольшим затратам на чтение и запись, но все же быстрее, чем блокировка.
- Летучий устойчив к мертвым замкам.