import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 使用读写锁 实现一个 缓存模型
*
*/
public class CasheDemo {
/**
* @param args
*/
private Map<String,Object> cache=new HashMap<String, Object>();
public static void main(String[] args) {
// TODO Auto-generated method stub
}
/*
public synchronized Object getData(String key){
Object value=cache.get(key);
if(value==null){
value="aaa"; //实际去queryDB();
}
return value;
}*/
//多个线程 读取的时候 可以同时并发.不会造成数据的破坏与冲突,
//但发现 数据为空的时候,该线程 改成 写锁 用来填充数据,写完后变成 读锁.
private ReadWriteLock rwl=new ReentrantReadWriteLock();
public Object getData(String key){
rwl.readLock().lock();
Object value=null;
try {
value=cache.get(key);
if(value==null){
rwl.readLock().unlock();
rwl.writeLock().lock();
try {
if(value==null)
value="aaa"; //实际去queryDB();
} catch (Exception e) {
// TODO: handle exception
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
rwl.readLock().unlock();
}
return value;
}
}
java 使用读写锁设计一个缓存模型
最新推荐文章于 2024-12-01 23:53:54 发布