只看了一下CopyOnWriteArrayList類,我想知道爲什麼它的get(...)方法不需要任何同步。 add(...)和set(...)方法使用ReentrantLock更改互斥塊中的基礎數組。但get(...)只是返回未經過同步的原始底層數組。好吧,底層數組聲明爲volatile:爲什麼CopyOnWriteArrayList.get不需要同步?
private volatile transient Object[] array;
但是我不明白如何使用volatile使得任何同步都是多餘的。它只會阻止編譯器緩存存儲在數組中的引用。如果我明白了爲什麼這裏不需要同步我可以寫我的代碼比以前少一些鎖爭...
感謝,奧利弗
該班的名字是一個提示。 – 2013-04-10 13:11:17
可能的副本[如何CopyOnWriteArrayList線程安全?](http://stackoverflow.com/questions/2950871/how-can-copyonwritearraylist-be-thread-safe) – 2013-04-10 13:12:02
@Mark Rotteveel:你是對的。謝謝。 – OlliP 2013-04-10 13:17:23