公平锁和非公平锁及读写锁
创作时间:
作者:
@小白创作中心
公平锁和非公平锁及读写锁
引用
CSDN
1.
https://blog.csdn.net/hyf_home/article/details/82930356
公平锁和非公平锁
如果一个锁是公平的,那么获取的顺序就应该符合请求的绝对顺序,即FIFO。
测试结果
非公平性锁可能使线程“饥饿”,为什么它又被设定成默认的实现呢?再次观察上表的结果,如果把每次不同线程获取到锁定义为1次切换,公平性锁在测试中进行了10次切换,而非公平性锁只有5次切换,这说明非公平性锁的开销更小。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。
读写锁
- 之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。
在没有读写锁支持的(Java 5之前)时候,如果需要完成上述工作就要使用Java的等待通知机制,就是当写操作开始时,所有晚于写操作的读操作均会进入等待状态,只有写操作完成并进行通知之后,所有等待的读操作才能继续执行(写操作之间依靠synchronized关键进行同步),这样做的目的是使读操作能读取到正确的数据,不会出现脏读。改用读写锁实现上述功能,只需要在读操作时获取读锁,写操作时获取写锁即可。当写锁被获取到时,后续(非当前写操作线程)的读写操作都会被阻塞,写锁释放之后,所有操作继续执行,编程方式相对于使用等待通知机制的实现方式而言,变得简单明了。
- 因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWriteLock,
特性:
- 读写锁接口
热门推荐
牡丹花怎么养殖方法和注意事项
赴港澳“一周一行”“一签多次”政策引关注!出入境部门答疑→
献血与献血浆,你真的了解吗?
如何准确识别轮胎的尺寸规格?轮胎尺寸规格的标识有什么含义?
AI智能体卷进金融业,一大批应用落地但商业化还需时间
轻松应对各种拍摄场景:28-200mm镜头性能解析与推荐
iPhone如何关闭公共网络WiFi自动连接?
正确认识代糖,科学进行减糖
怀孕期间需注意避免的茶饮有哪些?
心源性休克常见病因
适合深夜发文的句子(35句)
房子缺西南角的风水补救与化解方法
想不通! 天然气汽车既环保又省钱, 为什么国家不大力推广呢?
如何快速知道对方是什么样的人?
治疗便秘促进肠蠕动的动作
游隼:地球上最快的动物
健康科普:洪灾后家庭消毒“三法”:煮、泡、洒
如何弥补孙颖莎的打法弱点?换教练或调整指导方式是关键
我的世界RLCraft任务汉化版 安卓版v2.9.1
频繁腹泻的应对之道:原因、诊断与防治策略
口腔黏膜活检——揭开口腔黏膜疾病谜团的金钥匙
三国志战略版群弓阵容攻略:两种主流配置详解
2025年QS亚洲大学排名发布:韩国15所大学跻身百强
“救命药”一旦吃错可能会要命!这才是服用硝酸甘油的正确姿势→
傅佩荣教授讲解《道德经》第六十四章:像事情开始时那样谨慎(上)
芭乐的性质及作用解析(探究芭乐的热性与凉性特点)
一文读懂维生素全家族
三大黄金动作详解:俯卧撑、引体向上、箭步蹲的标准姿势
精选内容集|- 探寻金酒的多元世界 从历史到调制秘诀无所不包
减肥期间吃泡面会不会变胖