黑马程序员技术交流社区
标题:
关于缓存设计思路的一些疑问
[打印本页]
作者:
冉世友
时间:
2013-1-7 11:28
标题:
关于缓存设计思路的一些疑问
我把value值放到getData方法外面了,这样多个线程才能共享value吧?
还有我在第一个if(value == null)后面加了个大括号,这样其它线程第一个判断不满足,就不用接着判断第二个if(value == null) 了?
大家看看我这样做有没有问题?
package cn.itcast;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/*
* 读写锁的应用:设计一个缓存系统
* 多个线程读不互斥,但是读写互斥,写写互斥
*/
public class CacheDemo {
private Map<String, Object> cacheData = new HashMap<String, Object>();
public static void main(String[] args) {
}
private Object value = null;
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getData(String key){
rwl.readLock().lock();
try {
value = cacheData.get(key);
if(value == null){
rwl.readLock().unlock();
rwl.writeLock().lock();
try{
if(value==null) //重复检查value状态,因为可能多个线程会访问到此处。
value = "aaa"; //实际去queryDB
} finally {
rwl.readLock().lock();
rwl.writeLock().unlock(); //在释放写锁之前上读锁
}
}
} finally {
rwl.readLock().unlock();
}
return value;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2