我有一个具有缓存实现,看起来像这样的旧代码:可变知名度
long lastUpadate;
...
public void checkCach(){
if(lastUpdated + UPDATE_INTERVAL < System.currentTimeMillis()){
synchronized(this){
//cache update goes here
lastUpdate = System.currentTimeMillis();
}
}
}
能有在多核处理器环境问题的线程就不会看到更新LASTUPDATE场,因为他们检查同步部分之外(处理器核心缓存的问题)?
更新:也可以重新排序被应用到该同步块,即第一LASTUPDATE字段将被设置,然后才缓存更新将被执行