在一个很好的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
对象。我错过了什么吗?
你是正确的,但文章实际上是关于完全不同的东西 - 减少锁的范围。 – gustafc 2010-06-23 17:58:22