公平锁和非公平锁及读写锁
创作时间:
作者:
@小白创作中心
公平锁和非公平锁及读写锁
引用
CSDN
1.
https://blog.csdn.net/hyf_home/article/details/82930356
公平锁和非公平锁
如果一个锁是公平的,那么获取的顺序就应该符合请求的绝对顺序,即FIFO。
测试结果
非公平性锁可能使线程“饥饿”,为什么它又被设定成默认的实现呢?再次观察上表的结果,如果把每次不同线程获取到锁定义为1次切换,公平性锁在测试中进行了10次切换,而非公平性锁只有5次切换,这说明非公平性锁的开销更小。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。
读写锁
- 之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。
在没有读写锁支持的(Java 5之前)时候,如果需要完成上述工作就要使用Java的等待通知机制,就是当写操作开始时,所有晚于写操作的读操作均会进入等待状态,只有写操作完成并进行通知之后,所有等待的读操作才能继续执行(写操作之间依靠synchronized关键进行同步),这样做的目的是使读操作能读取到正确的数据,不会出现脏读。改用读写锁实现上述功能,只需要在读操作时获取读锁,写操作时获取写锁即可。当写锁被获取到时,后续(非当前写操作线程)的读写操作都会被阻塞,写锁释放之后,所有操作继续执行,编程方式相对于使用等待通知机制的实现方式而言,变得简单明了。
- 因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWriteLock,
特性:
- 读写锁接口
热门推荐
邰丽华团队如何打造这场“无障碍”春晚?
便秘知识科普——便秘的原因和治疗原则
花洒清洁小妙招,告别水柱过硬烦恼!
优优美家教你解决淋浴花洒水柱过硬!
噪音治理:拯救你的心理健康
最难考的证书排行榜揭秘:你敢挑战这些高含金量证书吗?
对公务员考试一无所知,该怎样准备?
世界卫生组织推荐:掌握健康生活方式
苏格拉底教你如何找到真正的幸福?
老舍笔下的祥子和虎妞:时代的牺牲品
南航明珠经济舱选座争议:乘客质疑“花钱买限制”,航司回应来了
小仙女是什么意思?解析“小仙女”的文化含义与用法
邮局的理财产品可靠吗?深度解析其优劣势与投资建议
金融强国行|金融为笔绘生态画卷 绿色金融展现蓬勃生命力
小龙虾美食文化探寻:从水域到餐桌的风味旅程
春暖驻龙岗区妇幼保健院教你如何在亲子互动中保持童心
成年人如何保持一颗童心?
儿童节前夕,成年人的童心去哪儿了?
穿越塔莎古道,探寻玄奘东归之路
秋冬探秘:塔莎古道的绝美风光
中国05式警用手枪威力低引争议
安徽六安警方展出新型警用手枪:ZLS05式警用转轮手枪亮相
05式警用手枪亮相上海街头:实战效果如何?
基督新教从罗马天主教分裂出去的历史背景
鼻咽癌放疗后怎样能快速恢复味觉
核桃的历史与文化背景
湖北孝感人54万双色球大奖得主现身说法:如何合法合规兑奖
双色球系统升级:从机选到智能购彩的新时代
双色球二等奖得主现身说法:如何安全领奖?
傻白甜:从夸人到骂人的演变