Нужно ли добавлять некоторые блокировки или синхронизацию, если записывается только один поток и читается несколько потоков?
Скажем, у меня есть глобальный объект:
class Global {
public static int remoteNumber = 0;
}
Периодически запускается поток для получения нового номера с удаленного устройства и его обновления (только запись):
new Thread {
@override
public void run() {
while(true) {
int newNumber = getFromRemote();
Global.remoteNumber = newNumber;
Thread.sleep(1000);
}
}
}
И есть один или несколько потоков, использующих этот глобальныйremoteNumber
случайно (только чтение):
int n = Global.remoteNumber;
doSomethingWith(n);
Вы можете видеть, что я не использую никаких замков илиsynchronize
чтобы защитить это, это правильно? Есть ли потенциальная проблема, которая может вызвать проблемы?
Обновить:
В моем случае не очень важно, чтобы потоки чтения в реальном времени получали последнее новое значение. Я имею в виду, что если есть какая-либо проблема (вызванная отсутствием блокировки / синхронизации), чтобы один поток чтения пропустил это значение, это не имеет значения, потому что у него будет шанс запустить тот же код в ближайшее время (возможно, в цикле)
Но чтение неопределенного значения недопустимо (я имею в виду, если старое значение равно 20, новое обновленное значение равно 30, но потоки чтения считывают несуществующее значение, скажем, 33, я не уверен, возможно ли это)