Разница между синхронизацией чтения полей и изменчивым

В хорошемстатья с некоторыми советами по параллелизмуПример был оптимизирован для следующих строк:

double getBalance() {
    Account acct = verify(name, password);
    synchronized(acct) { return acct.balance; }
}

Если я правильно понимаю, смысл синхронизации состоит в том, чтобы гарантировать, что значение acct.balance, читаемое этим потоком, является текущим и что все ожидающие записи в поля объекта в acct.balance также записываются в основную память ,

Этот пример заставил меня задуматься: не будет ли эффективнее просто объявить acct.balance (то есть поле баланса класса Account) какvolatile? Это должно быть более эффективным, сэкономить вам всеsynchronize на доступ к acct.balance и не будет блокировать весьacct объект. Я что-то пропустил?

Ответы на вопрос(3)

Ваш ответ на вопрос