面试真题

Java · 中等 · 快手

手撕读写锁(ReadWriteLock)

中等 Java 🎤 快手
参考答案
结论:通过状态计数与条件等待实现允许多读单写的读写锁。核心要点:1. 维护readCount读计数、writeCount写计数(或AQS state高低位);2. 获取读锁:当writeCount==0时CAS增加readCount,否则等待;3. 获取写锁:当readCount==0且writeCount==0时获取,否则等待;4. 示例:手写可用synchronized+Condition:读锁wait(writeCount>0),写锁wait(readCount>0||writeCount>0),释放时notifyAll。原理:读读共享、读写互斥、写写互斥;为防写饥饿可加写优先队列。对比:内置synchronized是排他锁,读写锁提升读多写少场景并发性能。
题目整理自公开面经,答案由校招宝自研生成,仅供参考