具有最快(并发)添加操作的java集合
我正在寻找一个集合,其中有最有效的“添加项”并发操作。Scala或Java很好
我通常:
- 每次插入100.000个条目
- 不在乎秩序
- 仅在没有附加时读取并清除集合。所以不重要
此外,它应该与多线程一起工作(因此是并发约束)。但我需要它在没有并发的情况下最有效:在没有并发访问的情况下,并发安全性的设计不应该有太大的影响
我使用此集合来记录性能度量。这就是为什么不偏离太多实际性能应该是最有效的。然而,由于集合的大小可能很大,并且事先不知道,因此它应该有效地应对大小的增加
那么,哪一个收藏最适合使用呢
我目前使用了一个mutable.ListBuffer
和buffer.synchronized{ ... }
环绕append(和clear)操作。我尝试使用带有类似synchronized{ ... }
块的var buf: List
(scala),但它严重影响了测量
# 1 楼答案
我会说ConcurrentLinkedQueue。它是使用CAS的O(1)插入。因此,在中等负载下,插入速度可能不会更快。如果你有非常高的负载,你可能需要考虑一个LinkedBlockingQueue。
既然您说它很可能在adds上是单线程的,那么使用CLQ和CAS将是您最好的选择