Preciso adicionar alguns bloqueios ou sincronização se houver apenas um segmento gravado e vários segmentos lendo?
Digamos que eu tenha um objeto global:
class Global {
public static int remoteNumber = 0;
}
Há um encadeamento executado periodicamente para obter um novo número remoto, e atualiza-o (apenas gravação):
new Thread {
@override
public void run() {
while(true) {
int newNumber = getFromRemote();
Global.remoteNumber = newNumber;
Thread.sleep(1000);
}
}
}
E há um ou mais threads usando esse globalremoteNumber
aleatoriamente (somente leitura):
int n = Global.remoteNumber;
doSomethingWith(n);
Você pode ver que eu não uso nenhum bloqueio ousynchronize
para protegê-lo, está correto? Existe algum problema em potencial que possa causar problemas?
Atualizar:
No meu caso, não é realmente importante que os threads de leitura obtenham o novo valor mais recente em tempo real. Quero dizer, se houver algum problema (causado pela falta de bloqueio / sincronização) fazer com que um thread de leitura perca esse valor, isso não importa, porque ele terá chance de executar o mesmo código em breve (talvez em um loop)
Mas a leitura de um valor indeterminado não é permitida (quero dizer, se o valor antigo for 20, o novo valor atualizado é 30, mas os threads de leitura lêem um valor inexistente, digamos 33, não tenho certeza se é possível)