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