2016-12-06 17 views
1

HashSetスレッドを安全にする方法はありますか?下記のサンプルを見た。scalaスレッドセーフHashSet

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

SynchronizedSetは現在廃止されています。どんな提案やサンプルも非常に役に立ちます。

+0

なお、[APIドキュメント](あなたはscala.collection.mutable.Setとしてこれをラップすることができますhttp://www.scala-lang.org/api/current/scala/collection/mutable/SynchronizedSet.html)は、廃止予定の 'SynchronizedSet'の代わりに使用できるものを提案しています。 – Jesper

+0

彼らはConcurrentHashMapの使用を提案しています。私はSetに興味があります。 – Prakash

答えて

5

APIドキュメントのscala.collection.mutable.SynchronizedSetが示すとおり、代わりにjava.util.concurrent.ConcurrentHashMap[A, Unit]を使用できます。あなたはそれがMapようSetの代わりに見えるようにしたい場合は、その後、あなたはそれがSetのように見えるようにMapの周りにラッパーを追加するためにjava.util.Collections.newSetFromMapを使用することができます

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

この意志、しかし、 Java 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]