根据CopyOnWritearrayList
的javadoc:
ArrayList
的线程安全变体,其中所有可变操作
(添加,设置等)是通过制作新的
基础数组
但是我想知道为什么每次在独占锁中执行此操作时都会每次都进行新的复制。
最佳答案
即使列表锁定了可变操作,仍然可以获取Iterator
并循环访问不同步的集合。这些可变操作创建的新副本不会被迭代器看到。如Javadocs中所述,这允许其他线程从列表中读取数据,而不必担心由于修改列表而导致的异常:
“快照”样式的迭代器方法在创建迭代器时使用对数组状态的引用。该数组在迭代器的生命周期内永不更改,因此不可能发生干扰,并且保证迭代器不会引发ConcurrentModificationException
关于java - CopyOnWriteArrayList实现的关注,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27341696/