¿Necesito agregar algunos bloqueos o sincronización si solo hay un hilo escrito y varios hilos leídos?
Digamos que tengo un objeto global:
class Global {
public static int remoteNumber = 0;
}
Hay un hilo que se ejecuta periódicamente para obtener un nuevo número del control remoto y lo actualiza (solo escribe):
new Thread {
@override
public void run() {
while(true) {
int newNumber = getFromRemote();
Global.remoteNumber = newNumber;
Thread.sleep(1000);
}
}
}
Y hay uno o más hilos usando este globalremoteNumber
aleatoriamente (solo lectura):
int n = Global.remoteNumber;
doSomethingWith(n);
Puedes ver que no uso ninguna cerradura osynchronize
para protegerlo, ¿es correcto? ¿Hay algún problema potencial que pueda causar problemas?
Actualizar:
En mi caso, no es realmente importante que los hilos de lectura tengan el último valor nuevo en tiempo real. Quiero decir, si hay algún problema (debido a la falta de bloqueo / sincronización) hace que un hilo de lectura pierda ese valor, no importa, porque tendrá la oportunidad de ejecutar el mismo código pronto (tal vez en un bucle)
Pero no está permitido leer un valor indeterminado (quiero decir, si el valor anterior es 20, el nuevo valor actualizado es 30, pero los hilos de lectura leen un valor inexistente, digamos 33, no estoy seguro de si es posible)