ReadWriteLock

x33g5p2x  于2021-12-18 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(315)
  • 写锁是一个支持重进入的排它锁,如果当前线程在获取写锁时,读锁已经被获取或者当前线程不是已经获取写锁的线程,则当前线程进入等待状态。
  • 读锁是一个支持重进入的共享锁,它可以被多个线程同时获取,在写锁未被任何线程获取的时候,读锁总会被成功的获取,如果写锁已被其他线程获取,则当前线程获取读锁失败,进入等待状态,如果写锁已被当前线程获取,则当前线程可以成功获取读锁。

利用读写锁的特性我们可以写一个缓存类,代码如下:

public class Cache {
    static Map<String, Object> map = new HashMap();
    static ReadWriteLock rwl = new ReentrantReadWriteLock();
    static Lock r = rwl.readLock();
    static Lock w = rwl.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();
        }
    }
    // 清空所有缓存
    public static final void clear() {
        w.lock();
        try {
            map.clear();
        } finally {
            w.unlock();
        }
    }
}

相关文章