美文网首页
ReadWriteLock读写锁

ReadWriteLock读写锁

作者: 刘彦青 | 来源:发表于2019-10-16 23:59 被阅读0次

    读写锁,分场景优化,提升性能。

    读写锁遵守的基本原则:

    1. 允许多个线程同时读共享变量。
    2. 只允许一个线程写共享变量。
    3. 如果一个写线程正在执行写操作,此时禁止多线程读共享变量。
    4. 读锁与写锁是互斥的;写锁与写锁也是互斥的。

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

    读写锁与互斥锁的区别:读写锁运行多个线程同时读共享变量。

    ReadWriteLock 是一个接口,ReentrantReadWriteLock可重入读写锁是他的实现类。

    读写锁实例:

    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    /**
     * @Description:
     * @Author: LYQ
     * @Date: 2019/9/10 11:12
     * @Version: V1.0
     **/
    public class Cache<K,V> {
        final Map<K,V> m = new HashMap<>();
        final ReadWriteLock rwl = new ReentrantReadWriteLock();
        //读锁
        final Lock r =  rwl.readLock();
        //写锁
        final Lock w = rwl.writeLock();
    
        /**
         * 读缓存
         * @param key
         * @return
         */
        V get(K key){
            //获取读锁
            r.lock();
            try {
                return  m.get(key);
            }finally {
                r.unlock();
            }
        }
    
        /**
         * 写缓存
         * @param key
         * @param value
         * @return
         */
        V put(K key,V value){
             w.lock();
             try{
                 return m.put(key,value);
             }finally {
                 w.unlock();
             }
        }
    
    }
    

    锁的升级与降级

    锁升级:读锁->写锁; 先获取读锁,然后升级为写锁。

    锁降级:写锁->读锁;先获取写锁,人后升级为读锁。

    ReadWriteLock支持锁的降级,不支持升级。

    由读锁变写锁需要先把读锁释放掉再获取写锁,由写锁变读锁无需释放写锁。


    **** 码字不易如果对你有帮助请给个关注****

    **** 爱技术爱生活 QQ群: 894109590****

    相关文章

      网友评论

          本文标题:ReadWriteLock读写锁

          本文链接:https://www.haomeiwen.com/subject/kjdbuctx.html