Многопоточность middle
Что такое synchronized?
Ответ
Захватывает монитор объекта. Instance-метод — монитор this. Static — монитор Class. Блок — указанный объект. Только один поток. Reentrant: поток может повторно захватить свой монитор (счётчик). Даёт happens-before, поэтому отдельный volatile не нужен.
Разбор: synchronized захватывает монитор: для instance-метода это this, для static — объект Class, для блока — указанный объект. Он реентерабелен (счётчик захватов) и даёт happens-before: всё, сделанное до выхода из блока, видно следующему потоку, входящему по тому же монитору — отдельный volatile не нужен. Ловушки в дистракторах: перепутаны this/Class, отрицание реентерабельности и ложная справедливость монитора (порядок не гарантируется).
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.