2014-07-13 67 views
1

如何在Scala中得到并发或线程安全的Map?例如,有collection.mutable.WeakHashMap,但它似乎不支持并发访问/更新。一个便宜的解决方案是将其隐藏在普通的Java同步锁后面?线程安全的弱密钥哈希映射

回答

2

使用番石榴的MapMaker

从文档的一个例子说明正是你需要的(翻译成斯卡拉):

import java.util.concurrent.ConcurrentMap 

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

这,当然,Java的地图,但你可以轻松将其包装成斯卡拉地图:

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 
+0

好的,但是有什么比在完整的第三方库中绘画更重的东西? –

+0

@ 0__如果你想要一个既是_concurrent_(不只是同步)并具有弱密钥的映射,那么我不认为这样的实现存在于标准库中。 – ghik