Java并发编程-AQS详解及案例实战(下篇)
文章目录
读写锁互斥:基于AQS的state二进制高低16位完成互斥判断
在ReentrantReadWriteLock
中,读写锁的互斥性是通过AQS(AbstractQueuedSynchronizer)的state
变量的不同位来实现的。state
变量是一个32位的整数,被分为两部分,高位用于表示写锁的状态,而低位用于表示读锁的状态。这种设计允许读写锁在读操作和写操作之间实现互斥,同时允许多个读操作并行执行。
state
变量的位分配
具体来说,state
变量的高位(例如,第16位到第31位)表示写锁的状态。如果这些位的值不为0,表示有线程持有写锁。低位(第0位到第15位)表示读锁的计数,每有一位线程获取读锁,低位的值就增加1。
读写锁互斥判断
在尝试获取读锁或写锁时,ReentrantReadWriteLock
会检查state
变量的相应位,以判断是否可以获取锁:
-
读锁获取:当尝试获取读锁时,会检查
state
变量的高位是否为0,即没有写锁被持有。如果高位为0,表示没有写锁被持有,可以安全地获取读锁,同时增加低位的读锁计数。 -
写锁获取:当尝试获取写锁时,会检查
state
变量的高位是否为0&#
原文地址:https://blog.csdn.net/qq_16038125/article/details/140237024
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!