想用緩存又不想用oscache覺得
麻煩,自己寫了個簡單的緩存,不小心發(fā)現(xiàn)getAllCity結(jié)果總是在第一次進去的時候數(shù)量加倍,第二次就好了,真實怪事.
代碼如下:
public?static?List?getAllCity(boolean?bInit)?throws XXException?{
????????List?cityList?=?new?ArrayList();
????????if?(null?==?CityInfos?||?CityInfos.size()?==?0)?bInit?=?true;
????????synchronized?(CityInfos)?{
????????????if?(bInit)?{?//retrieve?city?info?from?database
????????????????CityService?service?=?new?CityService();
????????????????cityList?=?service.getAllCitys();
????????????????CityInfos.clear();
????????????????if?(null?!=?cityList?&&?cityList.size()?>?0)?{
????????????????????log.info("========"?+?"cityList?size?:?"?+?cityList.size()?+?"========");
????????????????????for?(Iterator?it?=?cityList.iterator();?it.hasNext();)?{
????????????????????????CityVo?cityVo?=?(CityVo)?it.next();
????????????????????????CityInfos.put(cityVo.getId(),?cityVo);
????????????????????}
????????????????}
????????????}
????????????cityList.addAll(CityInfos.values());
????????}
????????return?cityList;
????}
CityInfos是一個static Hashtable,查了下原來是共用了cityList,將
synchronized 里面的cityList 改成
List tmpCityList 就可以了? :)? 為什么會犯低級錯誤呢?? :(