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();