只看了一下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