news 2026/2/19 17:38:15

Java中的读写锁

作者头像

张小明

前端开发工程师

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

一、读写锁的概述

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

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

注意:

1、

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

SystemVerilog测试平台组件详解:深度剖析原理

SystemVerilog测试平台组件详解:从“会写”到“懂设计”的跃迁之路你是否也曾在初学SystemVerilog时,翻遍各种“systemverilog菜鸟教程”,却依然搞不清为什么别人写的测试平台结构清晰、模块分明,而自己写的代码总是信号满天飞、连…

作者头像 李华
网站建设 2026/2/18 14:22:18

基于LLM的对话级语音合成系统VibeVoice到底有多强?

基于LLM的对话级语音合成系统VibeVoice到底有多强? 在播客制作人熬夜剪辑多轨录音、有声书团队反复调试角色音色的今天,一个能“听懂对话”的AI语音系统正悄然改变内容生产的底层逻辑。微软推出的 VibeVoice-WEB-UI 并非又一款文本朗读工具,而…

作者头像 李华
网站建设 2026/2/20 3:11:35

VibeVoice-WEB-UI能否用于商业用途?授权协议全面解读

VibeVoice-WEB-UI能否用于商业用途?授权协议全面解读 在播客制作、有声书生成和AI虚拟角色对话日益普及的今天,一个关键问题浮出水面:我们能否真正“自由”地使用那些看起来开源、免费的语音合成工具进行商业化内容生产?尤其是像 …

作者头像 李华
网站建设 2026/2/17 21:48:15

为什么越来越多创作者选择VibeVoice进行内容配音?

为什么越来越多创作者选择VibeVoice进行内容配音? 在播客制作人凌晨三点反复调试录音电平的时候,在有声书团队为两位角色对话的语气衔接焦头烂额时,在虚拟主播项目因配音成本过高而被迫延期的会议室里——一个共同的问题正在浮现:…

作者头像 李华
网站建设 2026/2/18 13:27:34

CH340芯片串口驱动获取与验证操作指南

CH340串口通信实战指南:从驱动安装到代码验证的全流程解析 你有没有遇到过这样的场景? 手里的ESP8266开发板插上电脑,设备管理器却只显示“未知设备”;Arduino IDE上传固件失败,提示“无法打开端口”;Pyt…

作者头像 李华
网站建设 2026/2/17 15:56:06

AI语音创作工具推荐:VibeVoice-WEB-UI为何备受关注?

VibeVoice-WEB-UI:当AI语音开始“对话” 在播客制作人熬夜剪辑两小时音频、只为让两位虚拟嘉宾的对谈听起来自然一点的时候,或许没人想到,真正改变游戏规则的不是更精细的后期工具,而是一个能“听懂”对话结构的AI。 传统文本转语…

作者头像 李华