简单案例--读写锁 ReentrantReadWriteLock

tech2023-06-20  102

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 使用“读写锁”提升读操作的并发性,也保证每次写操作对所有的读写操作的可见性,同时简化了

              编程方式。

最新回复(0)