En un programa Java altamente concurrente y suponiendo que mis métodos están escritos correctamente y correctamente sincronizados, me pregunto acerca de cómo determinar qué es mejor:Costo de sincronización
void synchronized something() {
...
}
o
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) {
...
}
}
Ahora me doy cuenta de que si los cálculos 'A' y 'B' toman mucho tiempo, la segunda versión es obviamente mejor.
Mi pregunta, sin embargo, es: ¿en qué momento sabe usted que la segunda versión es más eficiente?
¿La segunda versión es siempre más rápida o hay un costo oculto por adquirir/liberar la cerradura varias veces?
Qué pasa si mi cálculo 'A' es simplemente algo trivial como:
s.getString().substring(0, 2).toLowerCase();
tenga en cuenta que tengo mi copia de * "Java Concurrency in Practice" * :) – SyntaxT3rr0r