在一篇包含一些并发技巧的文章中,一个示例针对以下几行进行了优化:
double getBalance() {
Account acct = verify(name, password);
synchronized(acct) { return acct.balance; }
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,同步点是确保此线程读取的acct.balance的值是最新的,并且对acct.balance中对象的字段的任何挂起写入也写入主存储器.
这个例子让我想一想:将acct.balance(即Account类的字段余额)声明为不是更有效率volatile吗?它应该更有效,除了你synchronize对acct.balance的所有访问权限,并且不会锁定整个acct对象.我错过了什么吗?
来自docs:
使用volatile变量可降低内存一致性错误的风险
但这意味着有时候volatile变量不能正常工作?奇怪的是如何使用 - 我认为这是非常糟糕的代码,有时有时不工作.我试过谷歌,但没有找到与volatile有关的示例内存一致性错误.你能提出一个吗?