黑马程序员技术交流社区

标题: 缓存系统设计 [打印本页]

作者: 血马雄风    时间: 2015-8-24 08:44
标题: 缓存系统设计
技术要求:1、可以缓存多个实体数据
          2、当前缓存系统中不存在你需要的数据,让我去数据库中读取
          3、当前缓存系统中存在你你需要的数据,我就直接给你
          4、存在多个线程读取数据

技术要点:1、使用读写锁
          2、锁上ReadLock,从缓存系统中读取数据。若有,直接到5;若没有
          3、释放ReadLock,锁上WriteLock,从数据库中读取数据,并存到缓存
          4、释放WriteLock,锁上ReadLock
          5、释放ReadLock,返回数据



class CacheDemo{
    private Map<String,Object> cache = new HashMap<String,Object>();
    private ReadWriteLock rwR = new ReentrantReadWriteLock();
        
    public Object getData(String key){
        rwR.readLock().lock();
        Object value = null;
        try{
            value = cache.get(key);
            if(value == null){
                rwR.readLock().unlock();  //A处
                rwR.writeLock().lock();
                try{
                    if(value == null){  //该语句的作用:若存在3个线程同时到A处之后,禁止其它2个线程进行读取
                        value = ...;    //实际去queryDB
                        cache.put(key, value);
                    }
                }finally{
                    rwR.writeLock().unlock();
                }
                rwR.readLock().lock();
            }
        }finally{
            rwR.readLock().unlock();
        }
        
        return value;
    }  
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2