import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteHashMap<K, V> {
private final Map<K, V> map;
private final ReadWriteLock lock;
private final ReadWriteLock.ReadLock rlock;
private final ReadWriteLock.WriteLock wlock;
public ReadWriteHashMap() {
map = new LinkedHashMap<>();
lock = new ReentrantReadWriteLock();
rlock = lock.readLock();
wlock = lock.writeLock();
}
public void put(K key, V value) {
wlock().lock();
try {
map.put(key, value);
} finally {
wlock().unlock();
}
}
public V get(K key) {
rlock().lock();
try {
return map.get(key);
} finally {
rlock().unlock();
}
}
public boolean containsKey(K key) {
rlock().lock();
try {
return map.containsKey(key);
} finally {
rlock.unlock();
}
}
}