Стоит разделить понятия «замок» и «блокировка объекта». Нет реальной идеи «заблокировать объект» - есть «получение (и освобождение)» блокировки , связанной с объектом. Да, это звучит так, как будто я придираюсь - но различие важно, потому что если вы говорите о заблокированном объекте , это звучит так, как будто другие потоки не смогут что-либо изменить в объекте, пока удерживается эта блокировка .
Вместо этого это просто означает, что никакой другой поток не сможет получить такую же блокировку, пока блокировка удерживается. Нет прямой связи между блокировкой и любым содержимым объекта, с которым связана блокировка.
Методы, объявленные как «синхронизированные», получают блокировку, связанную с экземпляром объекта, которому они принадлежат. Это только заставляет другие синхронизированные методы на том же объекте ожидать и синхронизированные операторы, которые явно синхронизируются на нем.
Лично мне не нравятся синхронизированные методы - мне нравится делать это более понятным, явно синхронизируя переменную-член (private, final), которая используется только для синхронизации.