Custo da sincronização

Em um programa Java altamente concorrente e assumindo que meus métodos foram escritos e sincronizados corretamente, estou pensando em como determinar qual é o melhor:

void synchronized something() {
     ...
}

ou

void something() {
     synchronized(this) {
         ...
     }
     // here do stuff no requiring synchronization
     .
     . // do computation 'A'
     .
     synchronized(this) {
         ...
     }
     // here do other stuff no requiring synchronization
     .
     . // do computation 'B'
     .
     synchronized(this) {
         ...
     }
}

Agora percebo que, se a computação 'A' e 'B' demorar muito tempo, a segunda versão é obviamente melhor.

Minha pergunta, no entanto, é: em que momento você sabe que a segunda versão é mais eficiente?

A segunda versão é sempre mais rápida ou existe um custo oculto para adquirir / liberar o bloqueio várias vezes?

E se meu cálculo 'A' for simplesmente algo trivial como:

s.getString().substring( 0, 2 ).toLowerCase();

questionAnswers(3)

yourAnswerToTheQuestion