2014-08-30 65 views
5

說我有一個數組[A,B,C,d]爲什麼CopyOnWriteArrayList安全?

螺紋希望將新元件ë添加到集合中。 CopyOnWriteArrayList創建新的數組,從舊的陣列拷貝所有的值,增加了新的元件Ë然後更新在它元件Ë引用到新的數組。

雖然螺紋一個副本值,線程也想添加新元素˚F。因此,它會將所有值,而不Ë增加˚F,然後更新參考陣列。

在這種情況下,陣列可以不具有元件ê在它。

如何線程安全在這裏實現?

回答

9

所有修改方法(addset,remove,clear等)都由鎖來保護。這就是你有正確的寫作順序。但是,由於寫時複製,這意味着每個後備數組都是有效的不變的,這意味着只讀操作不需要鎖定。 (現場持支持數組是volatile,所以你仍然得到正確之前發生行爲。)