volatile обеспечивает видимость и порядок доступа к полю между потоками. Это полезно для флага остановки или публикации состояния, но не делает составные операции атомарными.
Что такое ключевое слово volatile в Java и для чего оно применяется?
volatile обеспечивает видимость и порядок доступа к полю между потоками. Это полезно для флага остановки или публикации состояния, но не делает составные операции атомарными.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
volatile обеспечивает видимость и порядок доступа к полю между потоками. Это полезно для флага остановки или публикации состояния, но не делает составные операции атомарными.
Запись volatile связана happens-before с последующим чтением той же переменной. Благодаря этому видимы и предшествующие записи, опубликованные через эту связь. Однако counter++ остаётся чтением, вычислением и записью, поэтому возможны потерянные обновления. Для счётчика нужен atomic или lock; для сложного инварианта — согласованная защита всех частей.