Foros del Web » Programación para mayores de 30 ;) » Java »

Concurrencia en lista

Estas en el tema de Concurrencia en lista en el foro de Java en Foros del Web. Tengo dos servicios asíncronos que tienen que actualizar un mismo registro, normalmente el servicio A llega mucho antes y el B es el que da ...
  #1 (permalink)  
Antiguo 19/05/2014, 08:45
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Concurrencia en lista

Tengo dos servicios asíncronos que tienen que actualizar un mismo registro, normalmente el servicio A llega mucho antes y el B es el que da el resultado final.

El problema es que en ocasiones el B llega décimas de segundo antes, para evitar errores el A comprueba el estado del registro y si B ha llegado no actualiza, pero cuando ocurre en un par de décimas de diferencia, B todavía no ha actualizado cuando A hace la comprobación.

Para solucionarlo se me ha ocurrido crear una lista static donde almacenar los registros que está actualizando B, y una vez actualizado eliminarlo de la lista. "A" debería comprobar que no está siendo actualizado buscando en la lista con contains o que ya lo ha sido viendo el estado del registro.

Para evitar problemas de concurrencia había pensado en simplemente usar un método estático synchronized para insertar/borrar en la lista, para leer en principio no haría nada ya que las probabilidades de que coincida lectura de un registro durante su escritura en lista son mínimas, ya que esta lista tendrá muy pocos datos (3 o 4 por segundo).

¿Opiniones? CopyOnWriteArrayList me parece innecesario en este caso.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: concurrencia, lista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:12.