Вы можете установить правило, которое гласит, что класс может иметь код, который блокирует «this» или любой объект, который создается кодом в классе. Так что это только проблема, если шаблон не соблюдается.
Если вы хотите защитить себя от кода, который не следует этому шаблону, то принятый ответ правильный. Но если следовать шаблону, это не проблема.
Преимущество блокировки (это) заключается в эффективности. Что делать, если у вас есть простой «объект значения», который содержит одно значение. Это просто оболочка, и она создается миллионами раз. Требуя создания частного объекта синхронизации только для блокировки, вы в основном удвоили размер объекта и удвоили количество выделений. Когда производительность важна, это преимущество.
Если вас не волнует количество выделений или объем памяти, избегать блокировки (это) предпочтительнее по причинам, указанным в других ответах.