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 使用读写锁设计一个缓存模型
最新推荐文章于 2025-05-11 15:51:01 发布
本文介绍了一种利用读写锁来实现高效并发缓存的方法。通过读写锁机制,允许多个读取操作同时进行,减少等待时间,并在数据缺失时转换为写锁更新缓存,有效避免了数据冲突。
136

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



