ReentrantReadWriteLock之读写锁判断

Posted lifacheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.

 

技术图片

 

 

  

 

以上是关于ReentrantReadWriteLock之读写锁判断的主要内容,如果未能解决你的问题,请参考以下文章

ReentrantReadWriteLock之读写锁判断

JUC并发编程 共享模式之工具 JUC 读写锁 ReentrantReadWriteLock -- ReentrantReadWriteLock(不可重入锁)使用 & 注意事项

JUC系列LOCK框架系列之七 核心锁类之ReentrantReadWriteLock

6.JUC之ReentrantReadWriteLock

java进阶之路-java同步系列之ReentrantReadWriteLock源码解析

「java.util.concurrent并发包」之 ReentrantReadWriteLock