Чем synchronized(this) отличается от synchronized(privateLock)?

Ответ

this доступен извне — любой может случайно или намеренно synchronized(obj) на том же объекте. privateLock (private final Object lock = new Object()) — полный контроль, никто извне не может захватить.

Разбор: Главное различие — в доступности монитора извне: this виден всем, поэтому посторонний код может захватить тот же монитор и спровоцировать взаимные блокировки или ложную конкуренцию, а private final Object lock инкапсулирован и даёт полный контроль. Производительность мониторов одинакова, оба монитора реентерабельны и оба дают happens-before — ловушка в подмене темы инкапсуляции темой скорости или семантики памяти.

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

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