Зачем использовать ReentrantLock, если можно использовать синхронизированный (это)?

Я пытаюсь понять, что делает блокировку параллелизма настолько важной, если ее можно использовать synchronized (this). В коде ниже, я могу сделать либо: синхронизировать весь метод или синхронизировать уязвимую область ( synchronized(this){...}) ИЛИ заблокируйте уязвимую область кода с помощью...