• ReentrantReadWriteLock分析


    ReentrantReadWriteLock会使用两把锁来解决问题,一个读锁,一个写锁

    线程进入读锁的前提条件:
        没有其他线程的写锁,
        没有写请求或者有读请求,但调用线程和持有锁的线程是同一个
    
    线程进入写锁的前提条件:
        没有其他线程的读锁
        没有其他线程的写锁

    ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。然后就是总结这个锁机制的特性了:
    (a).重入方面其内部的WriteLock可以获取ReadLock,但是反过来ReadLock想要获得WriteLock则永远都不要想。
    (b).WriteLock可以降级为ReadLock,顺序是:先获得WriteLock再获得ReadLock,然后释放WriteLock,这时候线程将保持Readlock的持有。反过来ReadLock想要升级为WriteLock则不可能,为什么?参看(a),呵呵.
    (c).ReadLock可以被多个线程持有并且在作用时排斥任何的WriteLock,而WriteLock则是完全的互斥。这一特性最为重要,因为对于高读取频率而相对较低写入的数据结构,使用此类锁同步机制则可以提高并发量。
    (d).不管是ReadLock还是WriteLock都支持Interrupt,语义与ReentrantLock一致。
    (e).WriteLock支持Condition并且与ReentrantLock语义一致,而ReadLock则不能使用Condition,否则抛出UnsupportedOperationException异常。

    http://blog.csdn.net/prestigeding/article/details/53286756

    http://blog.csdn.net/u012506661/article/details/53157004

    http://cmsblogs.com/?p=2213

  • 相关阅读:
    go第二天
    go第一天
    engish
    english
    git 生成公钥
    tp5 验证码
    css处理文本折行截断
    数组对象总结(牢记)
    全局css样式
    Flexbox 弹性盒子布局
  • 原文地址:https://www.cnblogs.com/hongdada/p/8514602.html
Copyright © 2020-2023  润新知