изменчивый модификатор скажет JVM о том, чтобы быть осторожным с потоками, которые работают одновременно. По сути, volatile используется для указания того, что значение переменной будет изменено различными потоками.
Декларирование летучий переменную Java означает:
Значение этой переменной не будет кэшировать поток локально: все читает и пишет будет идти прямо к «основной памяти»
Доступ к переменная действует так, как будто она заключена в синхронизированный блок, синхронизированный по себе.
Мы говорим «действует как будто» во второй точке, потому что для программиста по крайней мере (и, вероятно, в большинстве реализаций JVM) не существует реальный объект блокировки участвует.
летучий модификатор указывает компилятору, что переменная модифицируется летучий может быть изменен неожиданно другими частями программы. Одна из этих ситуаций связана с многопоточными программами.
В многопоточной программе иногда два или более потока имеют одну и ту же переменную экземпляра. Для соображений эффективности каждый поток может хранить свою собственную частную копию такой общей переменной.
Реальная (или основная) копия переменной обновляется в разное время, например, когда вводится синхронизированный метод. Хотя этот подход работает отлично, он может быть неэффективным время от времени. В некоторых случаях все, что действительно имеет значение, состоит в том, что главная копия переменной всегда отражает ее текущее состояние.
Для этого просто укажите переменную как volatile, которая сообщает компилятору, что она всегда должна использовать основную копию изменчивой переменной (или, по крайней мере, всегда держать личные копии в актуальном состоянии с главной копией, и наоборот). Кроме того, доступ к главной переменной должен выполняться в точном порядке, в котором они выполняются на любой частной копии.
Это примерно так же, как специфический спрашивать, когда требуется 'int' или' while' – yshavit
http://stackoverflow.com/questions/3488703/when-exactly-do -you-use-the-volatile-keyword-in-java –
@yshavit нет, это не так. –