multithreading - Scala-Colecciones seguras de hilo mutable
collections map (2)
Necesito un Mapa de hilos seguros mutable y una Lista de hilos seguros modificables en Scala. Sé que las colecciones inmutables son seguras para subprocesos por defecto. Pero, necesito actualizar mis colecciones muy a menudo debido a que no puedo usar inmutable. También necesito mi mapa mutable seguro para hilos para mantener el orden de inserción.
Ahora mismo estoy usando el siguiente mapa
val map = scala.collection.mutable.LinkedHashMap[String,Any]()
Este mapa mantiene el orden de inserción y es mutable. ¿Cómo puedo hacer que el hilo sea seguro?
- Estás duplicando temas ...
Como lo mencionó AlexIv en su respuesta , hay un rasgo que puedes combinar si quieres seguridad con el hilo. Aunque hay otra manera:
val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
Eso debería darle el mapa con sincronización en cada acceso . Fácil, pero puede que no cumpla con los requisitos de rendimiento. Si es así, probablemente sería más fácil crear una clase personalizada que extienda LinkedHashMap
, combinando el rasgo de putIfAbsent
concurrent.Map
(como se sugirió) y proporcione la implementación de métodos relevantes, es decir: putIfAbsent
, remove
replace
(2 sobrecargas).
Sugerencia rápida para aquellos que vienen a esto en 2018 o más tarde:
import java.util.concurrent.ConcurrentHashMap
val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap