Меня интересует разница между объявлением переменной как volatile
и постоянным доступом к переменной в блоке synchronized(this)
в Java?
В соответствии с этой статьей http://www.javamex.com/tutorials/synchronization_volatile.shtml можно много чего сказать, есть много различий, но есть и некоторые сходства.
Мне особенно интересна эта информация:
...
- доступ к энергозависимой переменной никогда не может блокировать: мы делаем только простое чтение или запись, поэтому в отличие от синхронизированного блока мы никогда не будем удерживать блокировку;
- поскольку доступ к энергозависимой переменной никогда не удерживает блокировку, он не подходит для случаев, когда мы хотим чтение-обновление-запись как элементарную операцию (если мы не готовы "пропустить обновление");
Что они подразумевают под чтение-обновление-запись? Разве запись также не является обновлением или они просто означают, что обновление является записью, которая зависит от чтения?
Прежде всего, когда лучше объявить переменные volatile
, а не обращаться к ним через блок synchronized
? Является ли хорошей идеей использовать volatile
для переменных, которые зависят от ввода? Например, есть переменная с именем render
, которая читается через цикл рендеринга и устанавливается событием нажатия клавиши?