Многопоточность middle
Чем synchronized(this) отличается от synchronized(privateLock)?
Ответ
this доступен извне — любой может случайно или намеренно synchronized(obj) на том же объекте. privateLock (private final Object lock = new Object()) — полный контроль, никто извне не может захватить.
Разбор: Главное различие — в доступности монитора извне: this виден всем, поэтому посторонний код может захватить тот же монитор и спровоцировать взаимные блокировки или ложную конкуренцию, а private final Object lock инкапсулирован и даёт полный контроль. Производительность мониторов одинакова, оба монитора реентерабельны и оба дают happens-before — ловушка в подмене темы инкапсуляции темой скорости или семантики памяти.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.