1、
package multiThread.art;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Cache {
static Map<String , Object> map = new HashMap<>();
static ReentrantReadWriteLock rw = new ReentrantReadWriteLock();
static Lock r = rw.readLock();
static Lock w = rw.writeLock();
// 获取一个 key 对应的 value
public static final Object get(String key){
// 获取读锁
r.lock();
try{
return map.get(key);
}finally{
// 释放读锁
r.unlock();
}
}
// 设置 key 对应的 value ,并返回旧的 value
public static final Object put(String key, Object value){
// 获取写锁
w.lock();
try{
return map.put(key,value);
}finally {
// 释放写锁
w.unlock();
}
}
}
说明1: Cache 组合一个“非线程安全的 HashMap ”作为缓存的实现,同时使用“读写锁”的“读锁”和“写锁”来保证
Cache 是线程安全的。
说明2: Cache 使用“读写锁”提升读操作的并发性,也保证每次写操作对所有的读写操作的可见性,同时简化了
编程方式。