黑马程序员技术交流社区
标题:
缓存系统设计
[打印本页]
作者:
血马雄风
时间:
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