2017-07-19 84 views
1

根據我對更新CopyOnWriteArrayList中數據的理解。使用ReentrantLock鎖定set方法,將數據複製到局部變量中,將要添加的數據添加到此局部變量中,然後將其更新爲整個List數據。是否有這樣做了向量的設置方法和synchronizedList爲什麼CopyOnWriteArrayList使用額外的內存進行設置,添加操作

+1

你讀過javadoc嗎? –

+0

爲什麼你假設_「set方法被鎖定使用ReentrantLock」_--我在API描述中沒有看到任何地方。 COWAL的意義在於防止突變干擾正在進行的迭代,當突變頻繁發生並且只讀訪問很常見時,可以得到回報。 –

+0

我沒有假設,我說根據源代碼。我檢查了在grepcode CopyOnWriteArrayList的源代碼。 – Nishat

回答

1

的同步版本的任何優點是有這樣做過來的Vector set方法的同步版本synchronizedList

例如任何優勢,你無法在一個線程中迭代synchronizedList並在另一個線程中對其進行修改。你會得到一個ConcurrentModificationException。 這絕不會發生在CopyOnWriteArrayList, 因爲迭代器的基礎數據結構是從來沒有修改。

Javadoc中的說明清楚地說明了優點和缺點。