gpt4 book ai didi

java - 同步与 Collection.synchronizedList 与 CopyOnWriteArrayList

转载 作者:行者123 更新时间:2023-12-01 16:40:05 24 4
gpt4 key购买 nike

如果我的要求规定我对列表的大部分访问都是为了阅读和修改(如果有的话),那么为什么我不能只执行以下任一操作

  1. 同步modifyList方法并使用ArrayList。对 arraylist 的所有读取都将不同步或
  2. 在modifyList中,执行Collections.synchronizedList(arrayList)或
  3. CopyOnWriteArrayList(不确定它在这里买什么)

为什么我要使用其中一个?哪个更好?

最佳答案

对于 1 和 2,我不确定您想要通过仅同步写入来完成什么。如果有潜在的读者可能正在迭代列表,或者正在通过索引查找内容,那么仅同步写入并不能证明什么。读取器在写入过程中仍然可以读取,并且可能会看到脏数据或出现异常(ConcurrentModificationIndexOutOfBounds。)

如果您希望在其他线程进行更改时进行“安全”迭代和获取,则需要同步读取和写入。此时,您可能刚刚使用了 Vector

CopyOnWriteArrayList 是专门为您想做的事情而构建的。它购买了安全的无同步迭代器,同时大大增加了写入成本。它还具有完全封装在 JavaSE API 中的优势,可以做您想做的事情(或者从简洁的问题来看您似乎想做的事情:)),这可以减少 future 开发人员的“惊讶”。

(请注意,如果您有涉及使用“get”读取的多步骤过程,即使使用 CopyOnWriteArrayList 也可能并不完全安全。您需要评估您的代码实际执行的操作以及是否存在交错修改会破坏正在获取的方法。)

关于java - 同步与 Collection.synchronizedList 与 CopyOnWriteArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com