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

Java中的读写锁

一、读写锁的概述

        之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁同一时刻可以允许多个读线程访问,但是在写线程访问时(写锁是排他的),所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。

        假设在程序中定义一个共享的用作缓存的数据结构,它大部分时间提供读服务(例如查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见(需要同步来完成)。在没有读写锁支持的(Java 5之前)时候,如果需要完成上述工作就要使用Java的等待通知机制,就是当写操作开始时,所有晚于写操作的读操作均会进入等待状态,只有写操作完成并进行通知之后,所有等待的读操作才能继续执行(写操作之间依靠synchronized关键进行同步),这样做的目的是使读操作能读取到正确的数据,不会出现脏读。改用读写锁实现上述功能,只需要在读操作时获取读锁,写操作时获取写锁即可。当写锁被获取到时,后续(非当前写操作线程)的读写操作都会被阻塞,写锁释放之后,所有操作继续执行,变得简单明了。一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWriteLock,它提供的特性如下图。

注意:

1、

http://www.jsqmd.com/news/202801/

相关文章:

  • MyBatis零基础入门:10分钟搭建第一个应用
  • VibeVoice能否识别标点符号影响语调?细节处理能力测评
  • 产品路线图公示:让用户了解未来发展计划
  • 历年CSP-X复赛真题解析 | B4089 [CSP-X2020 山东] 勇敢的津津
  • VibeVoice-WEB-UI对硬件配置要求高吗?显存需求实测
  • 如何判断VibeVoice生成结果是否符合预期?质量检查清单
  • VibeVoice-WEB-UI是否支持字体缩放?界面可读性优化
  • 文学奖联动:赞助小说大赛并将获奖作品有声化
  • VibeVoice-WEB-UI是否提供音频预览功能?即时试听体验
  • Vitis中数据流优化技术解析:深度剖析并行架构设计
  • 产品介绍PPT模板:适用于展会与投资人路演
  • 如何提升VibeVoice生成语音的情感表达力?提示词技巧
  • 语音生成延迟测试:VibeVoice实时性表现如何?
  • WorldPM:解锁偏好模型的终极缩放潜力
  • 核心要点:HDI PCB工艺热管理设计与散热结构创新
  • 高速信号回流路径设计:图解说明与实践
  • 超越VLOOKUP:这些高效替代方案你知道吗?
  • ARM64汇编语言核心要点:数据处理指令全面讲解
  • AndroidGen:AI自主操控安卓应用的免费新工具
  • CMDER终极配置指南:AI帮你打造完美终端环境
  • 企业级MINIO应用:构建私有云存储解决方案
  • 联合国可持续发展目标结合:用技术促进平等获取信息
  • 为什么越来越多创作者选择VibeVoice进行内容配音?
  • FinalShell官网实战:5个高效服务器管理技巧
  • 研究生必读:高效利用vivado license开展创新研究
  • 如何将VibeVoice集成到自己的产品原型中?API接口展望
  • 效率对比:传统建模vs OPENMANUS AI生成手部原型
  • 1小时用FSEARCH构建个性化代码推荐系统
  • 传统搜索 vs AI聚合:获取2025资料的效率革命
  • 手把手教程:使用SPICE仿真二极管整流电路工作原理