我有一个 List
需要被多个线程调用。只有一个作家,这个作家将添加元素而不做任何其他事情。永远不会删除或修改元素。许多并发读取器线程将调用 list.size()
和 list.get(index)
。
我们必须假设,有时内部数组需要随着元素的添加而增长。
我可以使用普通的 ArrayList
吗?还是我需要实现一些花哨的并发结构来避免异常?
最佳答案
如果您的读者都需要读取 List
的相同状态,这意味着作者不能在所有阅读者之间写入,那么是的,您需要使用 ReadWriteLock
或处理这种情况的一些更复杂的方法。
如果您在内存使用方面无法幸免,请不要介意您的读者是否始终拥有可用的最新数据,而您的唯一目标只是避免异常,请考虑一个 CopyOnWriteArrayList
,它旨在避免写入/迭代冲突时出现异常。当您写入此 List
时,它会生成一个新列表作为完成结果,但当前使用 List
的读者会继续阅读“旧”(预写)列表.
关于java - ArrayList 是否有可能在单写多读系统中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251053/