Por que usar um ReentrantLock se é possível usar sincronizado (isso)?

Estou tentando entender o que torna a trava na simultaneidade tão importante se alguém pode usar synchronized (this). No código fictício abaixo, eu posso fazer: sincronizou o método inteiro ou sincronizou a área vulnerável ( synchronized(this){...}) OU bloqueie a área de código vulnerável com um...