• ReentrantReadWriteLock之读写锁判断


    一. 读写锁是怎么实现的?

      继承AQS,然后通过将AQS中的state转化为二进制,分为高16位和低16位来区分。高16位表示读状态,低16位为写状态。

    二. 解析表示方式(高低16位)

      假设此时state是数值S

      a.写锁

        在判断写锁时,通过 K=S&0X0000FFFF, 将高位全部抹掉,此时只有低16位,然后判断K是否大于0,K>0,表示有写锁,反之没有。

      b.读锁

        在读锁时,是通过K=S>>>16,我们可以看到是无符号右移(int是有符号,防止高位为1时,右移高位补1),此时右移,高位补0,把写锁的低16位判断去掉了。然后在判断K是否大于0, K>0,有读锁,反之没有。

    下图是在获取读写锁时的操作。方法分别为 tryAcquire 和 tryAcquireShare.

      

  • 相关阅读:
    第1章 引论
    Java反射
    用户职责菜单请求组
    API及接口清单
    独立值集导入脚本
    报表对应程序包查询
    正则表达式
    合并工作表
    去重
    分割表
  • 原文地址:https://www.cnblogs.com/lifacheng/p/11614164.html
Copyright © 2020-2023  润新知