并发编程(五)

发布时间:2024年01月12日

读写锁:适用于读多写少的场景

读写锁是一种用于同步访问共享资源的机制,它允许多个线程同时读取共享资源,但在写入时则需要独占式的访问。

Java中的读写锁可以通过java.util.concurrent.locks包中的ReadWriteLock接口和它的实现类ReentrantReadWriteLock来实现。ReadWriteLock接口定义了两个锁,一个用于读操作,一个用于写操作。ReentrantReadWriteLock是一个可重入的读写锁实现,它提供了公平和非公平两种模式。

使用读写锁可以显著提高并发性能,因为它允许多个线程同时读取共享资源,而不会互相干扰。但是,在写入共享资源时,其他线程仍然可以读取共享资源,但无法进行写入操作。这样可以避免长时间独占资源,从而提高并发性能。

通过一个缓存示例说明读写锁的使用方式,代码示例如下

public class Cache {
    static Map<String, Object> map = new HashMap<String, Object>();
    static ReentrantReadWriteLock 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();
        }
    }
}

锁降级是指把持住(当前拥有的)写锁,再获取到读锁,随后释放(先前拥有的)写锁的过程

文章来源:https://blog.csdn.net/weixin_47480200/article/details/135553558
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。