所谓缓存机制其实就是类似一个map,你传入一个key,然后程序会通过你这个key去缓存中找对应的value,如果这个value不存在,那么就去数据库中找这个value,如果此时有多个线程同时访问这个缓存的话就会存在并发的问题,在将要写的时候去读出了数据,在将要读数据的时候进行了写入数据,那么此时我们就应该用到读写锁。
public class CacheDemo {
public static void main(String[] args) {
}
/**
*
* (缓存读取方法)
* com.lbm.Test
* 方法名:getValue
* 创建人:LBM
* 时间:2016年11月18日-上午10:08:42
* @return Object
* @exception
* @since 1.0.0
*/
Map<String, Object> cache = new HashMap<String,Object>();
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();//创建一个读写锁
public Object getValue(String key){
readWriteLock.readLock().lock();
Object value =null;
try{
value = cache.get(key);//在缓存中通过key去寻找value
if (value == null) {//如果这个值为空
readWriteLock.readLock().unlock();//如果数据为空的时候要释放读锁
readWriteLock.writeLock().lock();//然后写入数据,上写锁
try {
if (value == null) {
value = "aaa";//实际是去数据库中查找数据
}
} finally {
readWriteLock.writeLock().unlock();//在数据库中读取数据并且写入缓存之后,释放写锁
}
readWriteLock.readLock().lock();
}
}finally{
readWriteLock.readLock().unlock();
}
return value;
}
}
用读写锁,我们就完成了对缓存机制的一个简单的模拟。