我有一個具有緩存實現,看起來像這樣的舊代碼:可變知名度
long lastUpadate;
...
public void checkCach(){
if(lastUpdated + UPDATE_INTERVAL < System.currentTimeMillis()){
synchronized(this){
//cache update goes here
lastUpdate = System.currentTimeMillis();
}
}
}
能有在多核處理器環境問題的線程就不會看到更新LASTUPDATE場,因爲他們檢查同步部分之外(處理器核心緩存的問題)?
更新:也可以重新排序被應用到該同步塊,即第一LASTUPDATE字段將被設置,然後才緩存更新將被執行