Потоки сами ничего не кешируют.
Но потоки читают / записывают в отдельные данные памяти, которые они читают / записывают в соответствии с моделью потоков CPU.
И по этой причине синхронизация с основной памятью между потокамиможет потребоваться.
В вашем случае, если вы создаете один экземпляр CachedObject
, который совместно используется несколькими потоками, новое состояние object1
может быть не обновлено / невидимо для других потоков, если setValue()
реализован в этомway:
public void setValue(int i){
this.value = i;
}
Поскольку он присваивает новое значение полю int
без какой-либо синхронизации, которая может быть видна только для текущего потока.
Но при этом у вас не возникнет проблемы:
private int volatile value;
public void setValue(int i){
this.value = i;
}
Или:
public void setValue(int i){
synchronized(this){
this.value = i;
}
}