multithreading scala collections map thread-safety

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?


  1. Estás duplicando temas ...
  2. 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