【问题标题】:Thread safe map which preserves the insertion order保留插入顺序的线程安全映射
【发布时间】:2013-07-09 05:17:26
【问题描述】:

在我的 Scala 应用程序中,我需要使用几个经常更新的地图和列表。 Scala 中是否存在维护插入顺序的线程安全集合?

【问题讨论】:

    标签: scala collections thread-safety


    【解决方案1】:

    是的,scala.collection.concurrent 包中有一个 trait:concurrent.Map 它只是一个 trait,所以只需将这个 trait 混入到您的 Map 中,它就会成为线程安全的。

    如果您需要一个好的并发映射,请尝试 google 的 ConcurrentLinkedHashMap 并使用 Scala/Java converter 将其转换为 Scala Map,这将提供比 mixin SynchronizedMap 更高的性能。例如我最喜欢的Spray 工具包,use 它作为实现它的缓存模块的核心结构。如您所见see,spray 是最快的 Scala 网络工具包

    【讨论】:

    • scala.collection.mutable.LinkedHashMap[String,Any] -> 这是正在使用的地图。我如何让它对你来说是线程安全的?
    • 我同样尝试了 new scala.collection.mutable.Map[String, Long] with scala.collection.concurrent.Map[String, Long] 编译失败:object creation impossible, since: [error] it has 8 unimplemented members.(错误消息被截断以适合注释)。切换到 LinkedHashMap 只产生 4 个未实现的成员...我认为这与 Long 的使用有关,但不知道该怎么做...感觉有点尴尬我自己添加对 Long 的支持或从 @ 退化987654333@ 到 Any 。有什么想法吗?
    • 那么列表呢?
    猜你喜欢
    • 2010-12-26
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2016-02-11
    • 2013-05-26
    • 2019-07-08
    相关资源
    最近更新 更多