Что такое volatile?

Ответ

Видимость между потоками (запрет кэширования в регистрах/L1-кэше) + запрет reordering вокруг volatile. НЕ гарантирует атомарность i++ (read-increment-write = три операции). Для атомарных — AtomicInteger.

Разбор: volatile гарантирует видимость изменений между потоками (значение читается из памяти, а не из регистра/кэша) и запрещает reordering вокруг обращений к полю, но НЕ делает составные операции атомарными: i++ — это три действия (read-increment-write), и между ними возможна гонка. Для атомарности нужен AtomicInteger или synchronized; volatile не берёт монитор и не блокирует.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться