This question already has answers here:
In what situations is the CopyOnWriteArrayList suitable? [duplicate]
(2个答案)
2年前关闭。
我找不到关于何时适用于CopyOnWriteArrayList的任何解释,我的意思是在什么情况下容器最适合。
有一个标题相同的问题,In what situations is the CopyOnWriteArrayList suitable?。但是,它已关闭,因为它与其他问题线程重复。我认为两个线程都没有回答问题,所以我启动了这个问题线程。
对于In what situations is the CopyOnWriteArrayList suitable?,它实际上表明
如果您有一个列表,其中迭代次数超过突变,则非常有效
但是我没有找到实际的应用场景。对于How can CopyOnWriteArrayList be thread-safe?,它实际上着重于CompyOnWriteArrayList为什么线程安全的原因。
感谢您的提前答复。
(2个答案)
2年前关闭。
我找不到关于何时适用于CopyOnWriteArrayList的任何解释,我的意思是在什么情况下容器最适合。
有一个标题相同的问题,In what situations is the CopyOnWriteArrayList suitable?。但是,它已关闭,因为它与其他问题线程重复。我认为两个线程都没有回答问题,所以我启动了这个问题线程。
对于In what situations is the CopyOnWriteArrayList suitable?,它实际上表明
CopyOnWriteArrayList
是如果您有一个列表,其中迭代次数超过突变,则非常有效
但是我没有找到实际的应用场景。对于How can CopyOnWriteArrayList be thread-safe?,它实际上着重于CompyOnWriteArrayList为什么线程安全的原因。
感谢您的提前答复。
最佳答案
基于javadoc,
java.util.ArrayList的线程安全变体,其中所有变量都是
操作(添加,设置等)通过重新制作来实现
基础数组的副本。
如您所见,对容器的任何修改都是昂贵的,尤其是当容器中的数据量很大时。
修改频率较低时,最好使用CopyOnWriteArrayList
。正如JCIP所建议的那样,
写时复制集合仅在以下情况下才合理使用:
迭代比修改要普遍得多。
例如事件通知系统。每当需要通知事件时,它都会迭代容器,但只有在更改观察者时才进行修改。前者的发生频率较高,而后者的发生频率较低。
10-07 16:01