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


