2016-12-06 88 views
1

什麼是使HashSet線程安全的可能方法?看到下面給出的一些樣品。scala線程安全HashSet

var test = new mutable.HashSet[Long] with mutable.SynchronizedSet[Long] 

SynchronizedSet目前已被棄用。任何建議或樣本將非常有幫助。

+0

注意,[API文檔( http://www.scala-lang.org/api/current/scala/collection/mutable/SynchronizedSet.html)建議你可以使用什麼來代替已棄用的'SynchronizedSet'。 – Jesper

+0

他們建議使用ConcurrentHashMap我對Set感興趣 – Prakash

回答

5

由於scala.collection.mutable.SynchronizedSet的API文檔建議,您可以改爲使用java.util.concurrent.ConcurrentHashMap[A, Unit]

如果你希望它看起來像一個Set,而不是像Map,那麼你可以使用java.util.Collections.newSetFromMap添加Map周圍的包裝,使它看起來像一個Set

def createSet[T]() = java.util.Collections.newSetFromMap(
    new java.util.concurrent.ConcurrentHashMap[T, java.lang.Boolean]) 

然而這將,返回一個Java Set。你可以用這個作爲scala.collection.mutable.Set

def createSet[T]() = { 
    import scala.collection.JavaConverters._ 
    java.util.Collections.newSetFromMap(
    new java.util.concurrent.ConcurrentHashMap[T, java.lang.Boolean]).asScala 
} 

現在你可以創建一個同步的設置與特定類型的元素,例如Long,就像這樣:

val set = createSet[Long]