首页 > 代码库 > 写出一个缓存系统的伪代码001
写出一个缓存系统的伪代码001
/** * 写出一个缓存系统的伪代码*/ public class CacheDemo { private Map<String, Object> map = new HashMap<String, Object>(); public static void main(String[] args) { // TODO Auto-generated method stub } public synchronized Object getData(String key){ Object value = map.get(key); if (value =http://www.mamicode.com/= null){ return "aaa";//实现QueryDB() } return value; } }
// 参考来源:黑马程序员-张孝祥
2017.3.4 再分析
上面代码是从同步的角度思考的,如果回答面试题估计没问题(我查网上别人也这么写)
但是,仔细思考后觉得把map定义为static更好
static Map<String, Object> map = new HashMap<String, Object>();
这样的话,即使new了一个新对象,map里数据还是保存的。
终于明白static的意义了。
静态变量是在类被加载时赋值一次,以后再new时,不会重新赋值。
独立于该类的任何对象,不依赖于特定的实例,被类的所有实例所共享。
再想想 -- 类名.static名--,就豁然开朗了。
也明白栈和堆的区别了。
栈是用完就没了,堆是赋值为null/结束是才会被jvm回收。
public class CacheDemo {
static Map<String, User> cacheMap = new HashMap<String, User>();
public User getUser(String id){
User user;
if((user = cacheMap.get(id)) != null){
return user;
}
user = QueryDB();
cacheMap.put(id, user);
return user;
}
public void setUser(String id){
User user = new User();
user.setName("name1");
cacheMap.put(id, user);
}
}
写出一个缓存系统的伪代码001
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。