From книга "Java Concurrency in Practice", стр. 26:
Вы можете использовать переменные volatile только при соблюдении всех следующих критериев:
Запись в переменную не зависит от ее текущего значения, или вы можете гарантировать, что только один поток всегда обновляет значение;
Переменная не участвует в инвариантах с другими переменными состояния; и
Как понять " Переменная не участвует в инвариантах с другими переменными состояния при использовании ключевого слова volatile"?