Será el valor de una variable actualizada por un hilo finalmente visto por otro hilo si no sincronizada en Java?

Yulin:

Sé que si el valor de una variable es actualizada por un hilo A y luego leído por otro hilo B, el nuevo valor no puede ser visto por el hilo B y B podría obtener un valor rancio. Mi pregunta es como las computadoras son muy rápidos, puede que supongo que esto sea posible problema de latencia es del orden de milisegundos y B finalmente verá el nuevo valor si estamos tomando sobre escalas de tiempo de minutos o incluso horas digamos?

Por eso estoy preguntando sobre esto está en mi código tengo un mapa mantener algunos registros y obras como las siguientes:

  1. usuario añadir un registro al mapa;

  2. el usuario ve a hacer algo de trabajo;

  3. usuario volver atrás y eliminar el registro;

Una gran cantidad de usuarios al mismo tiempo hacer esto. Paso 1 y el Paso 3 es muy rápida y se hace en el mismo hilo (el hilo actor de AKKA para ser específicos), etapa 2 lleva tiempo y se realiza en las discusiones de trabajo separadas. Ahora bien, como el paso 2 el trabajo falla a veces, el paso 3 puede que nunca se ejecutan y registros olvidados pueden acumularse en el mapa, he de poner un hilo programador para comprobar el mapa de registros olvidados y eliminarlos para evitar fugas de memoria, el período de verificación es de varias horas como el fracaso ocurre muy rara vez, en este escenario, es prácticamente bien usar un mapa no concurrente?

dm03514:

Si un solo hilo akka el actor es responsable del mapa de acceso y el mapa es la memoria local para que el actor , entonces debería no ser necesario el uso de un mapa concurrente. Esto se debe a que no hay acceso concurrente, y no hay posibilidad de cualquier condición de carrera.

La cuestión es si el mapa se comparte la memoria entre la actualización / agente de eliminación y la limpieza el actor / hilo. En este caso sería necesario para sincronizar o de lo contrario podría haber razas de datos.

Esto podría evitarse por el actor actualización / quitar también el apoyo a algún tipo de mensaje de limpieza (que tienen un rendimiento / rendimiento implicaciones para el actor, pero sería una simple y primera aproximación segura), donde se bloquearía el fin de iterar el mapa y registros huérfanos de limpieza.


Para responder a su pregunta es NO OK utilizar un mapa no concurrente (no sincronizado) si el mapa se comparte entre varios actores / hilos.

Supongo que te gusta

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