首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CopyOnWriteArrayList实施关注

CopyOnWriteArrayList实施关注
EN

Stack Overflow用户
提问于 2014-12-07 10:26:22
回答 1查看 178关注 0票数 2

根据CopyOnWritearrayList的javadoc

ArrayList的一个线程安全变体,在该变体中,所有可变操作(添加、设置等)都是通过创建基础数组的新副本来实现的。

但是我想知道为什么每次它在独占锁中执行这个操作时都会复制新的副本。

EN

回答 1

Stack Overflow用户

发布于 2014-12-07 10:33:45

即使列表锁定了可变操作,仍然可以在集合上得到一个Iterator和循环,这是不同步的。迭代器不会看到这些可变操作创建的新副本。这允许其他线程从列表中读取,而不必担心由于修改列表而导致的异常,如Javadocs中所提到的:

“快照”样式迭代器方法在迭代器创建时使用对数组状态的引用。这个数组在迭代器的生存期内不会改变,因此干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27341696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档