ConcurrentHashMap necesario con ReadWriteLock?

Mateo McPeak:

Tengo una Mapque es leído por múltiples hilos, pero que es (de vez en cuando) se aclaró y reconstruido por otro hilo.

He rodeado todo el acceso a este mapa con

readWriteLock.readLock().lock()
try {
  ... access myMap here...
} finally {
  readWriteLock.readLock().unlock()
}

... o los writeLock()equivalentes, dependiendo del tipo de acceso.

Mi pregunta es ... será el ReadWriteLockgarantizar que las actualizaciones myMapson visibles para los otros hilos (ya que deben esperar hasta después de que el unlock()es llamado por el hilo de la escritura? O, ¿también necesito hacer myMapun mapa concurrente, como ConcurrentHashMap?

Probablemente voy a hacer eso, sólo para estar seguro, pero me gustaría entender mejor.

hmakholm izquierda sobre Monica:

Sí, esto debe estar bien incluso sin un mapa de procesos conscientes. El Javadoc paraReadWriteLock explícitamente dice:

Todas las implementaciones ReadWriteLock deben garantizar que los efectos de sincronización de memoria de las operaciones WriteLock (como se especifica en la interfaz Lock) también llevan a cabo con respecto a la readLock asociada. Es decir, la adquisición de un hilo con éxito el bloqueo de lectura va a ver todas las actualizaciones hechas a la versión anterior del bloqueo de escritura.

(Por supuesto, mediante el uso de un bloqueo de lectura / escritura en todo lo que depende en el mapa apoyar concurrentes búsquedas de diferentes temas. Uno podría imaginar estructura de datos inteligente que tratar de ahorrar tiempo en general mediante la mutación de algún estado en caché interna durante una búsqueda. Sin embargo, la norma colecciones como HashMapno lo harán).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=229398&siteId=1
Recomendado
Clasificación