前置知识:了解 AQS(AbstractQueuedSynchronizer)流程
一 读锁
1) 写锁被占用,且不是当前线程占用,进CLH队列排队,是被当前线程占用,获取共享读锁
2) 写锁未被占用,查看CLH队列是否未空,不为空则进CLH队列排队,为空则获取共享读锁
二 写锁
1) 读锁被占用
a) 被自己占用,则占用写锁
b) 非自己占用,进CLH队列排队
2) 读写锁未被占用
占用写锁
前置知识:了解 AQS(AbstractQueuedSynchronizer)流程
一 读锁
1) 写锁被占用,且不是当前线程占用,进CLH队列排队,是被当前线程占用,获取共享读锁
2) 写锁未被占用,查看CLH队列是否未空,不为空则进CLH队列排队,为空则获取共享读锁
二 写锁
1) 读锁被占用
a) 被自己占用,则占用写锁
b) 非自己占用,进CLH队列排队
2) 读写锁未被占用
占用写锁