Чем отличается synchronized на методе и в блоке?

Ответ

synchronized на методе — блокировка на весь метод (неявно берётся монитор this, а у статического — Class). synchronized(obj) {...} — на конкретный объект-монитор и конкретный кусок кода. Блок даёт больше контроля: блокировку можно держать только на нужный участок, выбрав произвольный объект и сузив критическую секцию.

Разбор: synchronized-метод неявно берёт монитор this (или Class у статического), блокируя на всё тело метода, а synchronized(obj){...} даёт контроль: можно выбрать произвольный объект-монитор и сузить критическую секцию. Ловушка: нестатический synchronized-метод блокирует именно экземпляр, а не класс, и блокировка одного synchronized-метода не оставляет остальные synchronized-методы того же объекта свободными — они делят один монитор.

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

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