自学内容网 自学内容网

Java并发编程-AQS详解及案例实战(下篇)

文章目录

读写锁互斥:基于AQS的state二进制高低16位完成互斥判断

ReentrantReadWriteLock中,读写锁的互斥性是通过AQS(AbstractQueuedSynchronizer)的state变量的不同位来实现的。state变量是一个32位的整数,被分为两部分,高位用于表示写锁的状态,而低位用于表示读锁的状态。这种设计允许读写锁在读操作和写操作之间实现互斥,同时允许多个读操作并行执行。

state变量的位分配

具体来说,state变量的高位(例如,第16位到第31位)表示写锁的状态。如果这些位的值不为0,表示有线程持有写锁。低位(第0位到第15位)表示读锁的计数,每有一位线程获取读锁,低位的值就增加1。

读写锁互斥判断

在尝试获取读锁或写锁时,ReentrantReadWriteLock会检查state变量的相应位,以判断是否可以获取锁:

  1. 读锁获取:当尝试获取读锁时,会检查state变量的高位是否为0,即没有写锁被持有。如果高位为0,表示没有写锁被持有,可以安全地获取读锁,同时增加低位的读锁计数。

  2. 写锁获取:当尝试获取写锁时,会检查state变量的高位是否为0&#


原文地址:https://blog.csdn.net/qq_16038125/article/details/140237024

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!