Il ScalaDoc dice questo su concurrentMap: "Deprecato (dalla versione 2.10.0) Utilizzare scala.collection.concurrent.Map
invece." Sfortunatamente, lo rest of the Scala docs non è stato aggiornato e fa ancora riferimento allo concurrentMap
.Best practice per il mixing in Scala simultanea.Mappa
Ho cercato di mescolare in concurrent.Map
in un HashMap
, con i seguenti risultati:
scala> val mmap = new mutable.HashMap[String, String] with collection.concurrent.Map[String, String]
<console>:16: error: object creation impossible, since:
it has 4 unimplemented members.
/** As seen from anonymous class $anon, the missing signatures are as follows.
* For convenience, these are usable as stub implementations.
*/
def putIfAbsent(k: String,v: String): Option[String] = ???
def remove(k: String,v: String): Boolean = ???
def replace(k: String,v: String): Option[String] = ???
def replace(k: String,oldvalue: String,newvalue: String): Boolean = ???
val mmap = new mutable.HashMap[String, String] with collection.concurrent.Map[String, String]
Così vediamo che, invece di un semplice mixin, alcuni metodi devono essere implementati. È questo il modo migliore per usare concurrent.Map
, o c'è un modo migliore?
Scala 2.11 deprecate i tratti sincronizzati –
Vero, modificato la risposta. – axel22
scala.collection.mutable.ConcurrentMap è anche deprecato a favore di scala.collection.concurrent.Map; rendendo questa modifica incasina il resto della soluzione –