У меня есть несколько вопросов о назначении Java.
У меня есть класс:
public class Test {
private String s;
public synchronized void setS(String str){
s = s + " - " + str;
}
public String getS(){
return s;
}
}
Я использую «синхронизированный» в своем установщике и избегаю его в своем установщике, потому что в моем приложении есть тонны получения данных и очень мало настроек. Настройки должны быть синхронизированы, чтобы избежать несоответствия. Мой вопрос: получение и установка атомарной переменной? Я имею в виду, что в многопоточной среде Thread1 собирается установить переменную s, а Thread2 собирается получить "s". Есть ли способ получить метод, отличающийся от старого значения s или нового значения s (предположим, у нас есть только два потока)?
В моем приложении получить новое значение не проблема, а получить старое не проблема. Но могу ли я получить что-то еще?
- А как насчет получения и размещения HashMap?
учитывая это:
public class Test {
private Map<Integer, String> map = Collections.synchronizedMap(new HashMap<Integer, String>());
public synchronized void setMapElement(Integer key, String value){
map.put(key, value);
}
public String getValue(Integer key){
return map.get(key);
}
}
Положить и получить атом? Как HashMap обрабатывает помещение элемента в него? Сначала он удаляет старое значение и ставит сейчас? Могу ли я получить что-то кроме старого или нового значения?
Заранее спасибо!