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.