如何用简短的代码设计一个Cache呢,简单的HashMap设计比较简单,考虑到并发性,如果使用synchronize关键字可能会降低系统性能,这时我们可以使用读写锁设计一个比synchronize方法更加优秀的Cache系统。
package CatcheTest;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Created by yangl on 2017/5/27.
*/
public class CatchTest {
private Map map = new HashMap();
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public synchronized Object getData(String key){
Object value = null;
rwl.readLock();
try {
value = map.get(key);
if (value == null) {
rwl.readLock().unlock();
rwl.writeLock().lock();
try {
if (value == null)
value = "Query Data from DB";
}
finally {
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally {
rwl.readLock().unlock();
}
return value;
}
}