根据CopyOnWritearrayList的javadoc
ArrayList的一个线程安全变体,在该变体中,所有可变操作(添加、设置等)都是通过创建基础数组的新副本来实现的。
但是我想知道为什么每次它在独占锁中执行这个操作时都会复制新的副本。
发布于 2014-12-07 10:33:45
即使列表锁定了可变操作,仍然可以在集合上得到一个Iterator和循环,这是不同步的。迭代器不会看到这些可变操作创建的新副本。这允许其他线程从列表中读取,而不必担心由于修改列表而导致的异常,如Javadocs中所提到的:
“快照”样式迭代器方法在迭代器创建时使用对数组状态的引用。这个数组在迭代器的生存期内不会改变,因此干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException。
https://stackoverflow.com/questions/27341696
复制相似问题