Какое ключевое слово volatile полезно для - PullRequest
595 голосов
/ 20 сентября 2008

Сегодня на работе я наткнулся на ключевое слово volatile в Java. Не очень знакомый с этим, я нашел это объяснение:

Теория и практика Java: управление волатильностью

Учитывая детали, в которых эта статья объясняет данное ключевое слово, вы когда-либо использовали его или когда-либо видели случай, когда вы могли бы использовать это ключевое слово правильным образом?

Ответы [ 23 ]

0 голосов
/ 16 июня 2018

Мне нравится Объяснение Дженкова :

Ключевое слово Java volatile используется для пометки переменной Java как «хранящейся в основной памяти». Точнее, это означает, что каждое чтение энергозависимой переменной будет считываться из основной памяти компьютера, а не из кэша ЦП, и что каждая запись в энергозависимую переменную будет записываться в основную память, а не только в кеш ЦП .

На самом деле, поскольку в Java 5 ключевое слово volatile гарантирует больше, чем просто энергозависимые переменные записываются и читаются из основной памяти.

Это расширенная гарантия видимости, так называемая гарантия «до события».

Характеристики производительности летучих

Чтение и запись изменчивых переменных приводит к чтению или записи переменной в основную память. Чтение и запись в основную память обходится дороже, чем доступ к кэшу процессора. Доступ к переменным переменным также предотвращает переупорядочение команд, что является обычной техникой повышения производительности. Таким образом, вы должны использовать переменные переменные только тогда, когда вам действительно необходимо обеспечить видимость переменных.

0 голосов
/ 24 декабря 2015

Изменчивый ключ при использовании с переменной гарантирует, что потоки, читающие эту переменную, увидят одно и то же значение. Теперь, если у вас есть несколько потоков, читающих и записывающих переменную, сделать переменную volatile будет недостаточно, и данные будут повреждены. Потоки изображений прочитали одно и то же значение, но каждый из них сделал несколько изменений (скажем, увеличил счетчик), при обратной записи в память нарушается целостность данных. Вот почему необходимо сделать переменную синхронизированной (возможны разные пути)

Если изменения вносятся одним потоком, а другим нужно просто прочитать это значение, то подходит volatile.

0 голосов
/ 17 ноября 2015

A Энергозависимая переменная изменяется асинхронно путем одновременного запуска потоков в приложении Java. Нельзя иметь локальную копию переменной, которая отличается от значения, которое в настоящее время хранится в «основной» памяти. По сути, переменная, объявленная volatile, должна синхронизировать свои данные во всех потоках, чтобы при каждом обращении к переменной или ее обновлении в любом потоке все остальные потоки сразу видели одно и то же значение. Конечно, вполне вероятно, что переменные переменные имеют более высокий уровень доступа и обновления, чем «простые» переменные, поскольку потоки могут иметь свою собственную копию данных для большей эффективности.

Когда поле объявляется как volatile, компилятор и среда выполнения уведомляются о том, что эта переменная является общей и что операции с ней не должны переупорядочиваться с другими операциями с памятью. Изменчивые переменные не кэшируются в регистрах или в кэшах, где они скрыт от других процессоров, поэтому чтение изменчивой переменной всегда возвращает самую последнюю запись любым потоком.

для справки: http://techno -terminal.blogspot.in / 2015/11 / what-are-volatile-variables.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...