news 2026/3/6 0:14:51

Java中的读写锁

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java中的读写锁

一、读写锁的概述

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

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

注意:

1、

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 17:11:36

VibeVoice-WEB-UI对硬件配置要求高吗?显存需求实测

VibeVoice-WEB-UI显存需求实测:长时多角色语音合成的硬件门槛 在播客、有声书和AI虚拟对话日益普及的今天,用户对语音内容的要求早已不再满足于“能听”,而是追求自然、连贯、富有情感表达的多人物对话体验。然而,传统文本转语音&…

作者头像 李华
网站建设 2026/3/4 8:56:25

零基础玩转EtherCAT:从接线到第一个控制程序

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个EtherCAT入门教程项目,包含:1.硬件接线示意图 2.基础网络配置向导 3.第一个LED控制示例 4.从站设备扫描demo 5.简单运动控制练习。要求&#xff1a…

作者头像 李华
网站建设 2026/3/4 9:56:12

Windows 安装 Git 教程

下载 https://git-scm.com/install/windows 下载好后双击安装包 选择组件(Select Components) 这个界面是让你决定:你要在 Windows 系统里植入哪些 Git 的便利功能? 默认选择挺好的,可以直接点下一步 Additional i…

作者头像 李华
网站建设 2026/3/4 12:55:16

TortoiseSVN在游戏开发中的实际应用案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个游戏项目管理工具,整合TortoiseSVN版本控制功能。要求能够特别处理大型二进制文件(如美术资源),实现增量更新和锁定机制。包…

作者头像 李华
网站建设 2026/3/4 13:04:37

华为OD刷题效率翻倍:这些工具你该知道

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 设计一个华为OD效率提升工具包,包含:1. 题目分类统计和进度追踪;2. 个性化刷题推荐系统;3. 代码片段管理库;4. 自动化测…

作者头像 李华
网站建设 2026/3/4 4:03:23

PCB Layout中电源布线规范:实战案例解析去耦电容布局

电源完整性实战:去耦电容布局的“黄金法则”与真实翻车案例你有没有遇到过这样的场景?一块板子原理图看起来毫无破绽,所有电源都加了电容,BOM清单也列得整整齐齐。可一上电,MCU莫名其妙复位;电机一启动&…

作者头像 李华