2015-10-29 40 views
1

據我瞭解,我們可以初始化一個空的HashMap的可變作爲斯卡拉 - 初始化一個空可變SynchronizedHashMap

var keyCountsMap :scala.collection.mutable.Map[Any, Int] = scala.collection.mutable.Map[Any, Int]() 

但是我怎麼初始化這個HasMap爲同步? 我試圖

var keyCountsMap :scala.collection.mutable.SynchronizedMap[Any, Int] = scala.collection.mutable.Map[Any, Int]() 

,但我得到以下錯誤:

type mismatch; found : scala.collection.mutable.Map[Any,Int]
required: scala.collection.mutable.SynchronizedMap[Any,Int]

+0

如果你想有一個線程安全的地圖,使用[concurrent.TrieMap](http://www.scala-lang.org/api/current/index.html#scala.collection.concurrent .TrieMap $)。 –

回答

3

可以混入的SynchronizedMap(deprecated in 2.11

var keyCountsMap = new scala.collection.mutable.HashMap[Any, Int]() with scala.collection.mutable.SynchronizedMap[Int, Int] 
+0

我需要一個scala版本不可知的解決方案。 –

+0

@HaseebJaved不會發生。如果某些東西被棄用,那麼很有可能,它將不會存在於未來的版本中。 – wheaties

+0

@wheaties是啊,這就是爲什麼我需要一個不會在版本2.11中棄用的解決方案 –

3

如果你看看你會看到文檔:

This class should be used as a mixin. It synchronizes the Map functions of the class into which it is mixed in.

Synchronization via traits is deprecated as it is inherently unreliable. Consider java.util.concurrent.ConcurrentHashMap as an alternative.