Каждое volatile-поле получит собственные гарантии видимости и порядка доступа. Но несколько volatile-полей не превращаются в единое атомарное состояние.
Что произойдёт, если в рамках одного класса несколько полей отметить модификатором volatile?
Каждое volatile-поле получит собственные гарантии видимости и порядка доступа. Но несколько volatile-полей не превращаются в единое атомарное состояние.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что произойдёт, если в рамках одного класса несколько полей отметить модификатором volatile?
Ответ
Каждое volatile-поле получит собственные гарантии видимости и порядка доступа. Но несколько volatile-полей не превращаются в единое атомарное состояние.
Читатель может увидеть новое значение одного поля и старое другого, если изменения выполняются отдельными действиями. Для инварианта между полями используйте общий lock либо неизменяемый объект состояния, публикуемый одной ссылкой. volatile также не делает атомарным x++. Он подходит для публикации и флагов, а не заменяет любую синхронизацию.