Я новичок в многопоточности и хотел проверить производительность метода по сравнению с синхронизацией на уровне блоков (ожидаю, что синхронизация на уровне блоков будет иметь лучшую производительность).
Моя синхронизация на уровне методов
public synchronized void deposit (double amount) {
//random calculations to put more load on cpu
int k=0;
for(int i=0; i<5 ;i++){
k=(k+i)*10000;
}
this.balance = this.balance + amount;
}
против моей синхронизации на уровне блоков
public void deposit (double amount) {
//random calculations to put more load on cpu
int k=0;
for(int i=0; i<5 ;i++){
k=(k+i)*10000;
}
synchronized (this) {
this.balance = this.balance + amount;
}
}
Я ожидал, что производительность синхронизации на уровне блоков будет выше, но на самом деле она была медленнее.В нескольких прогонах производительность была такой же, но в целом она работала на 0,2 секунды медленнее, чем синхронизация на уровне метода.
Почему это медленнее?