В высококонкурентной программе Java и предполагая, что мои методы правильно написаны и правильно синхронизированы, мне интересно, как лучше определить, что лучше:
void synchronized something() {
...
}
или
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) {
...
}
}
Теперь я понимаю, что если вычисление "A" и "B" занимает много времени, вторая версия, очевидно, лучше.
Однако мой вопрос: в какой момент вы знаете, что вторая версия более эффективна?
Является ли вторая версия всегда быстрее или есть скрытая стоимость приобретения/освобождения блокировки несколько раз?
Что делать, если мои вычисления "А" просто тривиальны:
s.getString().substring( 0, 2 ).toLowerCase();