一个简单的缓存Demo,直接上代码
public class CacheData {
public Map<String,String> cache = new HashMap<String,String>();
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
/**
* multi-read ,single-write
*/
public String getData(String key){
String value = null;
readWriteLock.readLock().lock();
try {
value = cache.get(key);
if(value == null){
readWriteLock.readLock().unlock(); //release ReadLock
readWriteLock.writeLock().lock(); //hold WriteLock
try {
//double-check
//如果第一个做了一次重查询,这时,value != null ;如果没有(value == null)验证,第二个还是要进来做一次重查询。
if(value == null){
value = "emituofo"; //query from heavy resource
cache.put(key,value);
}
} finally {
readWriteLock.writeLock().unlock();
}
readWriteLock.readLock().lock(); // hold ReadLock
}
} finally {
readWriteLock.readLock().unlock();
}
return value;
}
}