并发数组列表
2022-09-02 14:00:56
我需要一个类似ArrayList的结构,只允许以下操作
get(int index)
add(E element)
set(int index, E element)
iterator()
由于迭代器在许多地方使用,因此使用太容易出错。这个列表可以增长到几千个元素,并且被大量使用,所以我很确定,这会太慢了。我将从它开始以避免过早的优化,但我敢打赌它不会很好地工作。Collections#synchronizedList
CopyOnWriteArrayList
大多数访问将是单线程读取。所以我问一下,什么是正确的数据结构。
我虽然将 包装在提供同步迭代器的东西中可以,但它不会,因为.考虑到并发行为,我显然需要后续的读取和迭代器可以看到所有更改。synchronizedList
ConcurrentModificationException
迭代器不必显示一致的快照,它可能会也可能不会看到更新,因为此操作仅用于将项目替换为其更新版本(包含一些添加的信息,这与迭代器的用户无关)。这些项是完全不可变的。set(int index, E element)
我清楚地说明了为什么不这样做。 是没有问题的,因为它缺少索引访问。我只需要几个操作,而不是一个完全成熟的。因此,除非任何与java并发列表相关的问题是这个问题的重复,否则这个问题不是。CopyOnWriteArrayList
ConcurrentLinkedQueue
ArrayList