看起來很清楚,從文件讀取(例如)時使用readLock,寫入時使用writeLock是適當的。然而,如果我有其中兩個值進行比較的操作,如:什麼時候可以安全地使用ReentrantReadWriteLock類的readLock()方法?
if (i == j) {
System.out.println("equal);
}
然後是它好使用readLock()代替writeLock鎖定此代碼?當然,我沒有寫任何東西,但是我正在比較兩個值,這與僅僅讀取數據有點不同,因爲涉及到一個操作。請記住,「我」或「j」可隨時更改。從理論上講,如果writeLock()沒有修改資源,readLock()只會向前移動,但我可能不完全理解這個問題的所有複雜性。它似乎有一點灰色地帶的潛力,所以我想我會得到一些輸入。
感謝大家,
馬特
你提到一個關於獨家和共享的好點。我在我的真實代碼中比較的兩個值來自1)一個方法(在必要時被鎖定)在另一個返回值的類中,2)來自我方法的未同步的局部變量。如果另一個線程調用它們,這些變量會立即發生變化,但readLock()應該能夠立即改變它們,並且如果它們正在改變,就停止閱讀這些值。非常感謝大家。 – 2011-03-16 06:17:30