Time leased cache 那道题的code是这样吗?如下:
假设KEY没有collision的话就应该用get()就完,但是按照大牛说的情况就应该用
getConcurrent.是这样么?
private Map cache = new HashMap();
private Map keyLock = new HashMap();
public V get(K key) {
synchronized(key) {
if (cache.containsKey(key)) {
return cache.get(key);
} else {
return loadValueWithKey(key);
}
}
}
public V getConcurrent(K key) {
ReentrantLock lock;
if (keyLock.containsKey(key)) {
lock = keyLock.get(key);
} else {
lock = new ReentrantLock();
keyLock.put(key, lock);
}
lock.lock();
V value;
if (cache.containsKey(key)) {
value = cache.get(key);
} else {
value = loadValueWithKey(key);
}
lock.unlock();
return value;
}