在一個很好的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