Да - это означает, что вы можете видеть весь код, который может захватить этот замок (оставляя в стороне возможность отражения).
Если вы заблокируете this
(которыйто, что, как я полагаю, вы называете «встроенной блокировкой»), тогда может делать другой код:
MonitorLock foo = new MonitorLock();
synchronized(foo) {
// Do some stuff
}
Этот код может находиться далеко от самого MonitorLock
и может вызывать другие методы, которыев свою очередь вынимают мониторы.Здесь легко попасть на тупиковую территорию, потому что вы не можете легко увидеть, что и какие блокировки будут приобретать.
С «закрытой» блокировкой вы можете легко увидеть каждый фрагмент кода который получает эту блокировку, потому что все это в пределах MonitorLock
.Поэтому проще рассуждать об этом замке.