Использовать SharedPreferences очень просто. Вам необходимо определить ключ, который вы будете использовать для получения данных позже. Вы можете хранить строки, целые числа, числа с плавающей запятой, логические значения ... Вы должны предоставить контекст.
Context context = getApplicationContext();
Для записи данных используйте этот код.
SharedPreferences mPrefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("color", "blue");
editor.apply();
Для извлечения данных используйте это
SharedPreferences mPrefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
String color = mPrefs.getString("color", "defaultValue");
Вы можете легко изменить тип с String на другие типы, которые могут наилучшим образом соответствовать вашим потребностям.
Надеюсь, это поможет.
Используя блокировку большая часть appropiate способа сделать это. Вы видите эту презентацию Jim Weirich на предмете: Что Весь Rubyist Должен Знать О Поточной обработке.
Кроме того, замораживание объекта не поможет Вам здесь, так как Вы хотите изменить эти переменные. Замораживание их на месте означает, что никакие дальнейшие модификации не будут применимы к ним (и поэтому Ваш 1% записей не будет работать).
Блокировка читателей-устройства записи является типичной проблемой с четко определенным решением:
Блокировка читателей-устройства записи
и существует много реализаций его:
Вы не хотите ставить блокировку для каждого чтения-записи
Необходимо использовать Взаимное исключение для синхронизации доступа к общему состоянию. Действительно нет никакого способа постараться не делать это.
На современных многоядерных машинах Вы не можете сделать предположения о том, как к памяти получат доступ или как доступы памяти будут взаимодействовать с кэшированием.
Я сам не использовал его, но вы можете попробовать Dataflow . Это делает все переменные однократно записываемыми.