【发布时间】:2011-03-07 09:39:08
【问题描述】:
在一个不错的article with some concurrency tips 中,一个示例被优化为以下几行:
double getBalance() {
Account acct = verify(name, password);
synchronized(acct) { return acct.balance; }
}
如果我理解正确,同步的重点是确保该线程读取的 acct.balance 的值是最新的,并且任何挂起的对 acct.balance 中对象字段的写入也被写入到主内存。
这个例子让我想到了一点:将acct.balance(即类Account的字段余额)声明为volatile不是更有效吗?它应该更有效,在访问 acct.balance 时保存所有 synchronize 并且不会锁定整个 acct 对象。我错过了什么吗?
【问题讨论】:
-
你是对的,但这篇文章实际上是关于完全不同的东西 - 减少锁定范围。
标签: java concurrency synchronization volatile synchronized