线程安全的弱键哈希映射

时间:2014-07-13 09:15:54

标签: scala caching concurrency scala-collections

如何在Scala中获得并发或线程安全的Map,其密钥很弱?例如,有collection.mutable.WeakHashMap但它似乎不支持并发访问/更新。一个廉价的解决方案是将它隐藏在常规的Java同步锁之后吗?

1 个答案:

答案 0 :(得分:2)

使用Guava的MapMaker

文档中的一个示例显示了您需要的内容(翻译成Scala):

import java.util.concurrent.ConcurrentMap

val timers: ConcurrentMap[Request, Stopwatch] = 
    new MapMaker().concurrencyLevel(4).weakKeys.makeMap

当然,这是Java地图,但您可以轻松地将其包装到Scala地图中:

import java.{util => ju}
import scala.collection.JavaConverters._
import scala.collection.mutable

val javaMap: ju.Map[String,String] = ...
val scalaMap: mutable.Map[String,String] = javaMap.asScala