В высокопараллельной 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' занимают много времени, вторая версия, очевидно, лучше.
Мой вопрос, однако, таков: в какой момент вы знаете, что вторая версияболее эффективен?
Всегда ли вторая версия быстрее или есть скрытые затраты на получение / снятие блокировки несколько раз?
Что если мои вычисления 'A' просто тривиальны, как:
s.getString().substring( 0, 2 ).toLowerCase();