首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用同步块包装CopyOnWriteArrayList

用同步块包装CopyOnWriteArrayList
EN

Stack Overflow用户
提问于 2016-01-07 14:59:14
回答 2查看 348关注 0票数 1

我有一个多线程程序,多个线程正在访问和编辑我的数据结构;我的数据结构是CopyOnWriteArrayList。由于CopyOnWriteArrayList是Java并发包的一部分,在对其执行修改操作时,是否仍必须将数据结构包装在同步块中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-07 15:40:24

答案取决于程序的架构。您可以完全使用“线程安全”类构建程序,但这并不一定会使应用程序“线程安全”。

当线程没有将数据放入暂时无效状态时,就需要同步。为了使其工作,您必须synchronize创建临时无效状态的例程,还必须同步可能看到该状态的每个例程。

因此,问题是,在执行您的程序时,是否有某个线程可以将该CopyOnWriteArrayList设置为您不希望看到的另一个线程的状态?(要么是因为其内容内部不一致,要么是因为它与某些其他数据结构不一致)。

如果答案是肯定的,那么您仍然需要同步。

票数 1
EN

Stack Overflow用户

发布于 2016-01-07 15:12:58

不,你没必要

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

但是,根据您修改数据的频率,CopyOnWriteArrayList可能不是最好的选择。有关一些潜在的替代方案,请参见这个StackOverflow问题

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

https://stackoverflow.com/questions/34658321

复制
相关文章

相似问题

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