package com.ThreadLearn.test;
import java.util.*;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
//面试题,设计一个缓存系统;用伪代码实现
public class CacheDemo {
//存放对象的容器
private Map<String,Object> map = new HashMap<String,Object>();
//读写锁
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getObject(String key) {
Object obj = null;
rwl.readLock().lock();
try{
if(map.get(key)==null){
rwl.readLock().unlock();
rwl.writeLock().lock();
try{
obj = readFromDB();
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}else{
obj = map.get(key);
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
rwl.readLock().unlock();
}
return obj;
}
public Object readFromDB(){
//从数据库中读取数据,代码略
return null;
}
}
本文介绍了一个简单的缓存系统设计方案,利用Java的读写锁来提高并发访问效率。通过伪代码展示了如何在读取缓存失败时进行写操作更新缓存,并重新获取读锁的过程。
447

被折叠的 条评论
为什么被折叠?



