2016-12-06 41 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]