Рассмотрим код снайпера ниже:
package sync;
public class LockQuestion {
private String mutable;
public synchronized void setMutable(String mutable) {
this.mutable = mutable;
}
public String getMutable() {
return mutable;
}
}
Во время потока Time1 Thread1 обновит переменную 'mutable'. Синхронизация необходима в установщике для очистки памяти из локального кэша в основную память.
Во время Time2 (Time2> Time1, поток не конфликтует) поток Thread2 будет считывать значение изменяемой переменной.
Вопрос - нужно ли ставить синхронизированный перед геттером? Похоже, это не вызовет никаких проблем - память должна быть обновленной, а локальная кэш-память Thread2 должна быть аннулирована и обновлена Thread1, но я не уверен.