gpt4 book ai didi

java - ArrayList 是否有可能在单写多读系统中失败?

转载 作者:搜寻专家 更新时间:2023-10-31 20:09:12 24 4
gpt4 key购买 nike

我有一个 List 需要被多个线程调用。只有一个作家,这个作家将添加元素而不做任何其他事情。永远不会删除或修改元素。许多并发读取器线程将调用 list.size()list.get(index)

我们必须假设,有时内部数组需要随着元素的添加而增长。

我可以使用普通的 ArrayList 吗?还是我需要实现一些花哨的并发结构来避免异常?

最佳答案

如果您的读者都需要读取 List 的相同状态,这意味着作者不能在所有阅读者之间写入,那么是的,您需要使用 ReadWriteLock 或处理这种情况的一些更复杂的方法。

如果您在内存使用方面无法幸免,请不要介意您的读者是否始终拥有可用的最新数据,而您的唯一目标只是避免异常,请考虑一个 CopyOnWriteArrayList,它旨在避免写入/迭代冲突时出现异常。当您写入此 List 时,它会生成一个新列表作为完成结果,但当前使用 List 的读者会继续阅读“旧”(预写)列表.

关于java - ArrayList 是否有可能在单写多读系统中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251053/

24 4 0