当前位置: 首页 > 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.jsqmd.com/news/53992/

相关文章:

  • 2025 年 11 月企业咨询公司权威推荐榜:战略规划、组织优化与数字化转型顶尖服务商深度解析
  • 2025年高压潜水轴流泵直销厂家权威推荐榜单:污水潜水泵/雪橇式轴流泵/卧式潜水泵源头厂家精选
  • 贝赛思速提分攻略!2025贝赛思备考机构TOP5,无老师领衔,提分率超90%
  • 微算法科技(NASDAQ:MLGO)深度学习区块链技术:构建信任+智能双引擎的数字新生态
  • rust语言下划线_作用有哪些
  • USB 2.0 高速 低速协商过程
  • 2025年十大农产品冷库安装公司排行榜,冷库安装专业制造商新
  • 抓VSS坐标脚本
  • 2025 年 11 月企业管理咨询公司权威推荐榜:战略赋能与组织变革的行业影响力深度解析
  • fastapi python项目构建 路由设置
  • 2025 年 11 月企业管理咨询公司十强权威推荐榜:战略规划与组织优化实力派首选,助力企业高效成长与持续领先
  • 2025年川渝黔实用时尚西餐料理培训哪家好?十大靠谱机构推荐
  • ReentrantLock 的典型使用场景和实现方法
  • 2025 年 11 月制造业降本增效咨询公司权威推荐榜:精益生产与成本优化专家团队深度解析及服务优势全景解析
  • 无源探头与高压探头技术对比分析
  • 数字马力笔试
  • 2025年上海离婚诉讼律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • 直击提分痛点!2025年11月贝赛思考试培训核心机构深度评测,封闭班首选推荐
  • 2025留学中介南京哪家好
  • 2025 年 11 月管理咨询公司权威推荐榜:战略规划与组织优化口碑优选,专业服务助力企业高效成长
  • Postman接口测试教程(完整版) - 指南
  • 开源项目观察8月报
  • jetson/ubuntu22.04系统安装ROS2
  • 2025年上海离婚谈判律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • 2025年双梁龙门吊厂家权威推荐榜单:10吨龙门吊‌/港口龙门吊‌/门式起重机源头厂家精选
  • 为你的STM32毕设项目加点料:AI智能风扇智能温控与风扇调节系统
  • ReentrantReadWriteLock的使用方法和使用场景
  • 2025 年 11 月中国十大咨询公司权威推荐榜:战略咨询,管理咨询,财务咨询,人力资源咨询,品牌咨询,专业实力与行业口碑深度解析
  • 2025年公路液压打桩机供货厂家权威推荐榜单:高速护栏立柱打桩机/马路护栏打桩机/道路打桩机源头厂家精选
  • 2025年重庆环境好的西点烘焙学校排行榜,设备先进口碑好的机