gpt4 book ai didi

java - 避免观察者模式中的并发修改

转载 作者:行者123 更新时间:2023-11-29 03:20:07 25 4
gpt4 key购买 nike

假设您实现了一个观察者模式,并且观察者可以决定在 onUpdate 方法上从您的主题中注销自己(或其他观察者)。

假设您正在使用 ArrayLists 来保存您的观察者,这将导致 java.util.ConcurrentModificationException,因为您在遍历列表时正在删除项目。

解决这个问题最好的方法是什么?

目前我正在克隆列表以便迭代 onUpdate 方法的克隆,但我相信应该有更好的解决方案...

最佳答案

有许多集合支持这一点。例如,jME3 使用他们自己的 ArrayList 变体,称为 SafeArrayList。这是一个开源项目,因此您可以在那里找到实现。

比每次读取都克隆更好的解决方案是在修改时复制列表。只需创建一个新列表,对其进行更改,然后将其分配回您的听众列表。

在大多数情况下,对观察者的更改发生的频率低于对观察者进行循环的频率。

如果您复制列表并修改克隆,那么任何迭代列表先前版本的内容都不会看到更改,但也不异常(exception)。

关于java - 避免观察者模式中的并发修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201356/

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