当前位置: 首页 > news >正文

ReentrantReadWriteLock 和 ReentrantLock 的联系与区别

相同点

  1. 可重入性

    • 两者都支持可重入,同一线程可以多次获取相同的锁
    • 都维护着获取锁的次数计数器
  2. 公平性策略

    • 都支持公平锁和非公平锁模式
    • 构造函数都可以指定是否采用公平策略
  3. 底层实现

    • 都基于 AbstractQueuedSynchronizer(AQS)框架实现
    • 都支持中断响应和超时获取锁
  4. 内存语义

    • 都提供与 synchronized 相同的内存可见性保证
    • 释放锁前的写操作对后续获取锁的线程可见

不同点

1. 锁的类型和并发特性

特性 ReentrantLock ReentrantReadWriteLock
锁类型 独占锁(排他锁) 读写分离锁
读读并发 不支持 支持
读写并发 不支持 不支持
写写并发 不支持 不支持
适用场景 一般互斥访问 读多写少场景

2. 获取锁的方式

// ReentrantLock
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {// 临界区代码
} finally {lock.unlock();
}// ReentrantReadWriteLock
ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();
// 获取读锁
rwLock.readLock().lock();
try {// 读操作
} finally {rwLock.readLock().unlock();
}// 获取写锁
rwLock.writeLock().lock();
try {// 写操作
} finally {rwLock.writeLock().unlock();
}

3. 性能特征

  • ReentrantLock: 适合读写频率相当或以写为主的场景
  • ReentrantReadWriteLock: 适合读操作远多于写操作的场景,可以显著提高读并发性能

4. 复杂度和开销

  • ReentrantLock: 实现简单,开销较小
  • ReentrantReadWriteLock: 实现复杂,有额外的状态管理和开销

5. 锁降级支持

// ReentrantReadWriteLock 支持锁降级(写锁降级为读锁)
ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();rwLock.writeLock().lock();
try {// 执行写操作String data = updateData();// 锁降级:在持有写锁的情况下获取读锁rwLock.readLock().lock();try {// 使用新数据useData(data);} finally {// 释放写锁,保留读锁rwLock.writeLock().unlock();}// 继续使用读锁
} finally {rwLock.readLock().unlock();
}

6. 条件变量支持

  • ReentrantLock: 支持多个 Condition 对象
  • ReentrantReadWriteLock: 只有写锁支持 Condition,读锁不支持

选择建议

选择 ReentrantLock 的场景:

  • 一般的互斥访问控制
  • 读写操作频率相近
  • 对性能要求较高且不需要读写分离

选择 ReentrantReadWriteLock 的场景:

  • 读操作远多于写操作(80%以上读操作)
  • 需要提高读并发性能
  • 数据一致性要求高且读频繁的场景

总结

ReentrantReadWriteLock 可以看作是 ReentrantLock 的扩展版本,专门针对读写分离场景进行了优化。两者都提供了比 synchronized 更强大的功能,但在具体应用场景上有明确的分工。选择哪种锁取决于具体的并发访问模式和性能要求。

http://www.gsyq.cn/news/64019.html

相关文章:

  • 贝赛思速提分攻略!2025贝赛思备考机构TOP5,无老师领衔,提分率超90%
  • 2025 年 11 月企业咨询公司权威推荐榜:战略规划、组织优化与数字化转型顶尖服务商深度解析
  • 2025 年 11 月企业管理咨询公司十强权威推荐榜:战略规划与组织优化实力派首选,助力企业高效成长与持续领先
  • 数字马力笔试
  • 开源项目观察8月报
  • jetson/ubuntu22.04系统安装ROS2
  • ReentrantReadWriteLock的使用方法和使用场景
  • 2025 年 11 月中国十大咨询公司权威推荐榜:战略咨询,管理咨询,财务咨询,人力资源咨询,品牌咨询,专业实力与行业口碑深度解析
  • 抗皱好的护护肤品年度更新:深纹改善率成为决定排名的关键指标
  • 2025年上海离婚房产律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • IoT技术在产线实践中的应用 - 详解
  • 2025 年 11 月管理咨询公司权威推荐榜:战略规划与组织变革领域十大专业机构深度解析
  • 精华液哪个牌子最好用?紧致提拉、美白亮肤、屏障修护全解析
  • 2025上海留学中介服务哪个好
  • python打包apk
  • C#开发后端:API 控制器(Controller) - 教程
  • python 关于ASCII 码的常见操作示例
  • 2025年中国十大个人IP打造公司推荐:高性价比的个人IP打
  • 2025年广东工业机械人厂家排行榜,新测评精选企业推荐
  • 人力资源/人力服务外包公司哪家好?2025TOP10 榜单,降本又合规的靠谱之选!
  • 借助神经网络手搓一个带finetune功能的手写数字识别来学习“深度神经网络”
  • 2025年北京房产分割律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • AI浪潮下的职业新机遇:从社交到编程的无限可能
  • 专业认证+高分案例:深度评测2025年11月最值得选的SAT辅导机构清单
  • 直击托福痛点!2025一对一托福培训机构深度测评,附个性化选课指南
  • 免费CDN推荐:强效安全防护 + 超稳运行 + 飞速加载,长期使用更安心
  • 2025托福高分指南!五大托福培训机构深度测评,封闭班提分更高效
  • 量子计算机操作系统的破晓:中国“本源司南“与全球开源生态全景解析 - 详解
  • 滤罐用磁铁矿滤料公司TOP5权威推荐:游泳馆水循环用磁铁矿滤
  • 2025托福提分必看!5大实力派机构深度解析,总有一款适合你