2016-12-22 6 views
2

Я иду через книги Java параллелизм на практикеИспользование летучих переменных в Java

я наткнулся на заявление на летучий следует использовать в следующих критериях

  1. Пишет переменной не зависит от его тока значение, или вы можете гарантировать, что только один поток когда-либо обновляет/записывает значение.
  2. переменные не участвует в инвариантах с другими государственными переменными
  3. Блокировка не требуется для любой другой причины, в то время как переменная осуществляется доступом.

Может ли кто-нибудь объяснить мне эти три примера с примером.

+0

только Google синхронизации и летучий – Sikorski

+0

В моем понимании, изменчивые переменный загружается из реальной памяти каждый раз, когда он вызывается вместо загрузки из предыдущего кеша ... следовательно, переменная не должна использоваться для других целей. В многопоточном env возможно, что поток может считывать изменчивые данные, прежде чем другой поток завершит запись на нем. –

+0

Чтобы понять слово volatile, вам придется пройти через модель памяти java. Доступ к изменчивой переменной вводит барьер памяти. А также компилятор не может оптимизировать инструкцию по доступу изменчивой переменной. Для справки это довольно хорошо читайте http://www.slideshare.net/michalwarecki/java-memory-model-23207253 – pannu

ответ

1

Ответ на ваши очки:

  1. volatile составляет около чтения значение параметра; он гарантирует, что записи будут видны для всех потоков. Это не препятствует условиям гонки записи
  2. Атомарность записи находится только на поле; volatile не обеспечивает координацию записи в другие областях
  3. Никаких других действий не защищены или включены с записью
+0

, пожалуйста, дайте примеры. В интервью они просят примеры – coder25

+0

@ coder25 Примерами могут быть ситуации в соответствии с моим ответом. Я уверен, вы можете подумать о некоторых. Кроме того, если вы не можете думать о некоторых, вы не должны подавать заявку на эту работу. – Bohemian

+0

Я хотел бы добавить, что только с изменчивой видимостью для всех потоков, но вы не знаете точное время. @ coder25 Если вы хотите узнать больше, прочитайте об этом https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html – ddarellis

Смежные вопросы