Я иду через книги Java параллелизм на практикеИспользование летучих переменных в Java
я наткнулся на заявление на летучий следует использовать в следующих критериях
- Пишет переменной не зависит от его тока значение, или вы можете гарантировать, что только один поток когда-либо обновляет/записывает значение.
- переменные не участвует в инвариантах с другими государственными переменными
- Блокировка не требуется для любой другой причины, в то время как переменная осуществляется доступом.
Может ли кто-нибудь объяснить мне эти три примера с примером.
только Google синхронизации и летучий – Sikorski
В моем понимании, изменчивые переменный загружается из реальной памяти каждый раз, когда он вызывается вместо загрузки из предыдущего кеша ... следовательно, переменная не должна использоваться для других целей. В многопоточном env возможно, что поток может считывать изменчивые данные, прежде чем другой поток завершит запись на нем. –
Чтобы понять слово volatile, вам придется пройти через модель памяти java. Доступ к изменчивой переменной вводит барьер памяти. А также компилятор не может оптимизировать инструкцию по доступу изменчивой переменной. Для справки это довольно хорошо читайте http://www.slideshare.net/michalwarecki/java-memory-model-23207253 – pannu