1
HashSetスレッドを安全にする方法はありますか?下記のサンプルを見た。scalaスレッドセーフHashSet
var test = new mutable.HashSet[Long] with mutable.SynchronizedSet[Long]
SynchronizedSetは現在廃止されています。どんな提案やサンプルも非常に役に立ちます。
HashSetスレッドを安全にする方法はありますか?下記のサンプルを見た。scalaスレッドセーフHashSet
var test = new mutable.HashSet[Long] with mutable.SynchronizedSet[Long]
SynchronizedSetは現在廃止されています。どんな提案やサンプルも非常に役に立ちます。
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]
なお、[APIドキュメント](あなたは
scala.collection.mutable.Set
としてこれをラップすることができますhttp://www.scala-lang.org/api/current/scala/collection/mutable/SynchronizedSet.html)は、廃止予定の 'SynchronizedSet'の代わりに使用できるものを提案しています。 – Jesper彼らはConcurrentHashMapの使用を提案しています。私はSetに興味があります。 – Prakash