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