西南IT社区
    • 注册
    • 登录
    • 搜索
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目

    JUC之读写锁

    极客生涯
    juc之读写锁
    1
    1
    20
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 水灵
      水灵 最后由 编辑

        读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。

        读操作可以多个线程,写操作只能一个线程。读写锁可重入的理解:读锁的重入是允许多个申请读操作的线程,而写锁同时只能允许单个线程占有,该线程的写操作可以重入。

        如果一个线程占有了写锁,在不释放写锁的情况下,它还能占有读锁,也就是锁的降级。

        如果一个线程同时占有了读锁和写锁,在完全释放了写锁,那么就转换为了读锁,以后写操作无法重入,如果写锁未完全释放时,写操作时可以重入的。

      Java并发包提供读写锁的实现是 ReentrantReadWriteLock特性:

      • 支持公平性和非公平的锁获取方式;
      • 支持重进入:写锁可以降级为读锁,但是读锁不能升级为写锁
      • 锁降级的定义:锁降级指的是写锁降级成为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级。锁降级是指把持住写锁,再获取到读锁,随后释放写锁的过程。
      • 写锁可以降级为读锁顺序:首先是获取写锁,第二步是获取读锁;之后是释放写锁,最后一步是释放读锁。但是它的缺点也十分的明显,就是会造成锁饥饿问题 一直读,没有写操作。

       &emsp添加锁都是独占,读读、读写、写写都是独占,每次只能一个操作读写锁,读读可以共享,提升性能,同时可以多人进行读操作。
      0d9e0e9a-9d53-445c-a0dd-e8f2debfcc8b-image.png

      1 条回复 最后回复 回复 引用 0
      • First post
        Last post
      使用HTML构建办公软件 使用HTML构建办公软件 使用HTML构建办公软件
      漫
      成
      Y
      洋
      书
      Y
      D
      U
      Y
      娇
      玩
      1
      光
      A
      庆
      小
      U
      Y
      L
      I
      Z
      I
      Y
      C

      西南地区IT社群(QQ)
      云南
      【昆明网页设计交流吧】243627302
      【昆明nodejs交流吧】 243626749
      【VUE】838405306
      【云南程序员总群】343606807
      【昆明UI设计】104031254
      【云南软件外包】15547313
      贵州
      【PHP/java源码/站长交流群】55692114
      四川
      【成都Java/JavaWeb交流】86669225
      【vaScript+PHP+MySql】116270060
      【UI设计/设计交流学习群】135794928
      重庆
      【诺基亚 JAVA游戏博物馆】 559479780
      【PHP,Java,Python,C++接单】 442103442
      西藏
      社群
      昆明网页设计交流吧
      友情链接
      • Funtask
      • Funtask 社区
      • SUWIS
      ©2019-2021 滇ICP备20006698号