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

标签 java multithreading concurrency

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

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

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

最佳答案

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

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

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

相关文章:

java - 如何使用 Java 在 Windows 中获取短文件名?

java - 空指针异常

python - Python 中的异步多线程抓取,线程有限

go - goroutine 没有输出

Java:Clob 到 byte[]

java - org.springframework.data.repository.Repository 类型无法解析。它是从所需的 .class 文件间接引用的

multithreading - Haskell forkIO 线程使用 putStrLn 在彼此之上写入

Java - 根据从串行端口接收的数据动态更改jLabel文本

android - Roboguice、AndroidAnnotations 和线程间的事件

java map并发更新