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