Разница между volatile и synchronized в Java



мне интересно, в чем разница между объявлением переменной как volatile и всегда доступ к переменной в synchronized(this) блок в Java?



согласно этой статье http://www.javamex.com/tutorials/synchronization_volatile.shtml есть много чего сказать, и есть много различий, но и некоторые сходства.



меня особенно интересует эта информация:




...




  • открыть чтобы изменчивая переменная никогда не имела возможности блокировать: мы только когда-либо делаем простое чтение или запись, поэтому в отличие от синхронизированного блока мы никогда не будем держаться за любую блокировку;

  • поскольку доступ к изменчивой переменной никогда не содержит блокировки, он не подходит для случаев, когда мы хотим чтение-обновление-запись как атомарная операция (если мы готовы "пропустить обновление");




что значит чтение-обновление-запись? Не является ли запись также обновлением или они просто означают, что обновление это запись, которая зависит от чтения?



прежде всего, когда это более подходит для объявления переменных volatile вместо того, чтобы получить доступ к ним через synchronized заблокировать? Это хорошая идея, чтобы использовать volatile для переменных, которые зависят от входного сигнала? Например, существует переменная с именем render то есть считывается через цикл рендеринга и устанавливается событием нажатия клавиши?

705   0  

Comments

    Ничего не найдено.