In einem stark konkurrierenden Java-Programm und unter der Annahme, dass meine Methoden korrekt geschrieben sind und korrekt synchronisiert, ich frage mich, wie Sie feststellen, was besser ist:Kosten der Synchronisation
void synchronized something() {
...
}
oder
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) {
...
}
}
Jetzt erkenne ich, dass, wenn die Berechnung von 'A' und 'B' viel Zeit in Anspruch nimmt, die zweite Version offensichtlich besser ist.
Meine Frage ist jedoch: An welchem Punkt wissen Sie, dass die zweite Version effizienter ist?
Ist die zweite Version immer schneller oder gibt es versteckte Kosten, wenn Sie die Sperre mehrfach erfassen/freigeben?
Was passiert, wenn meine Berechnung 'A' ist einfach etwas trivial wie:
s.getString().substring(0, 2).toLowerCase();
Beachten Sie, dass ich meine Kopie von * "Java Concurrency in der Praxis" * * habe – SyntaxT3rr0r