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之读写锁判断的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC 读写锁 ReentrantReadWriteLock -- ReentrantReadWriteLock(不可重入锁)使用 & 注意事项
JUC系列LOCK框架系列之七 核心锁类之ReentrantReadWriteLock