概述
ReadWriteLock使用
public class CacheSystemTest {
public static void main(String[] args) {
MyCache cache = new MyCache();
ExecutorService threadpool = Executors.newCachedThreadPool();
for(int i =0;i<10;i++) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
cache.getData("testKey");
}
});
threadpool.execute(t);
}
threadpool.shutdown();
}
}
class MyCache {
private Map<String,Object> cacheStore = new HashMap<String, Object>();
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public Object getData(String key) {
Object data = null;
//获取读锁,开始在缓存中查找我们想要的data
readWriteLock.readLock().lock();
try {
data = cacheStore.get(key);
if(data==null) {//缓存中并未找到们想要的数据
readWriteLock.readLock().unlock(); //释放读锁
readWriteLock.writeLock().lock(); //开始查询数据库并且数据库中查询的数据写入缓存,获取写锁
try {
if(data==null) {
//query the data from the DB
data = "data query from db";
cacheStore.put(key, data);
}
}finally {
//数据库中数据写入缓存成功,释放写锁
readWriteLock.writeLock().unlock();
//并且此时需要重新获取读锁,否则下方finally里面释放读锁报错
readWriteLock.readLock().lock();
}
}
}finally {
//缓存中就找到我们想要的数据,读取成功,释放读锁
readWriteLock.readLock().unlock();
}
readWriteLock.writeLock().lock();
System.out.println(Thread.currentThread().getName() + " obtain the data from cache system: " + (String)data);
readWriteLock.writeLock().unlock();
return data;
}
}
最后
以上就是淡然小馒头为你收集整理的缓存系统设计的全部内容,希望文章能够帮你解决缓存系统设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复