J'ai besoin d'une carte de sécurité du fil mutable et d'une liste de sécurité de fil mutable à Scala. Je sais que les collections immuables sont le fil de sécurité par défaut. Mais, je dois mettre à jour mes collections très souvent à cause de laquelle je ne pouvais pas utiliser immuable. De plus, j'ai besoin de ma carte mutable Threadsafe pour maintenir l'ordre d'insertion.
En ce moment je suis en utilisant la carte ci-dessous
val map = scala.collection.mutable.LinkedHashMap[String,Any]()
Cette carte maintient l'ordre d'insertion et est mutable. Comment puis-je le faire filer en sécurité?
Comme cela a été mentionné par Alexiv dans sa réponse , il y a un trait que vous pouvez mélanger si vous voulez la sécurité du fil. Il y a un autre moyen cependant:
val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
Cela devrait vous donner la carte avec la synchronisation sur chaque accès . Facile, mais pourrait ne pas répondre aux exigences de performance. Si tel est le cas, il serait probablement plus facile de créer une classe personnalisée prolongeant le LinkedHashMap
, mélangeant dans le concurrent.Map
Trait (comme on l'a suggéré de suggérer) et fournissez la mise en œuvre des méthodes pertinentes, c'est-à-dire: putIfAbsent
, remove
replace
(2 surcharges).
Astuce rapide pour ceux qui arrivent à cela en 2018 ou plus tard:
import Java.util.concurrent.ConcurrentHashMap
val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap