什么时候适用于CopyOnWriteArrayList

时间:2017-10-22 12:33:41

标签: java multithreading

关于何时适用于CopyOnWriteArrayList,我找不到任何解释,我的意思是容器最适合的情况。

有一个同名的问题In what situations is the CopyOnWriteArrayList suitable?。但是,它已关闭,因为它与其他问题线程重复。我认为两个线程都没有回答这个问题,所以我发起了这个问题线程。

对于In what situations is the CopyOnWriteArrayList suitable?,它实际上表明CopyOnWriteArrayList

  如果你有一个迭代次数超过变异的列表

,那么

非常有效

但我没有找到实际的应用场景。对于How can CopyOnWriteArrayList be thread-safe?,它实际上关注的是CompyOnWriteArrayList是线程安全的原因。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:3)

基于javadoc,

  

java.util.ArrayList的线程安全变体,其中所有变量都是   操作(添加,设置等)通过重新实现来实现   基础数组的副本。

正如您所看到的,对容器的任何修改都是昂贵的,尤其是当容器中的数据大小很大时。

当修改频率较低时,最好使用CopyOnWriteArrayList。正如 JCIP 所建议的那样,

  

写时复制集合仅在使用时才合理使用   迭代比修改更常见。

例如事件通知系统。每次需要通知事件时它都将迭代容器,但只有在更改观察者时才会修改。前者的出现频率较高,后者的频率较低。