java - 具有最快(并发)添加操作的集合

标签 java scala collections concurrency

我正在寻找一个具有最有效的“添加项目”并发操作的集合。 Scala 或 Java 都不错。

我通常:

  • 插入 100,000 个条目,一次一个
  • 不关心顺序
  • 仅在没有追加时读取并清除集合。所以并不重要

此外,它应该适用于多个线程(因此存在并发约束)。但我需要它在没有并发时最有效:并发安全的设计在没有并发访问时不应该产生太大影响。

我使用这个集合来记录性能测量。这就是为什么不让实际性能偏差太多应该是最有效的。但是,由于集合大小可能很大并且无法提前知道,因此它应该有效地应对大小增加。

那么哪个集合最适合使用?

我目前在追加(和清除)操作中使用了 mutable.ListBufferbuffer.synchronized{ ... } 。我尝试使用带有类似 synchronized{ ... } block 的 var buf: List (scala),但它严重影响了测量。

最佳答案

我会说ConcurrentLinkedQueue 。使用 CAS 插入的时间复杂度为 O(1)。因此,在中等负载下,您可能不会有更快的插入速度。如果您的负载非常非常高,您可能需要考虑 LinkedBlockingQueue .

既然您说添加时可能是单线程的,那么使用 CLQ 和 CAS 将是您的最佳选择。

关于java - 具有最快(并发)添加操作的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50294880/

相关文章:

java - 调用方法时出错

scala - 在 slick 中更新表的前 n 行

scala - Spark中独立爆炸多个列

java - 枚举、类、反射和泛型转换

java.io.Exception com.android.okhttp 上的流意外结束

java - 按键聚合 hashmap 中的值

使用并发的 Java 性能

java - Java 中集合的浅拷贝

Java,涉及 "{n} "量词的正则表达式

Scala - 辅助构造函数总是必须调用另一个构造函数有什么好处?