公平锁和非公平锁及读写锁
创作时间:
作者:
@小白创作中心
公平锁和非公平锁及读写锁
引用
CSDN
1.
https://blog.csdn.net/hyf_home/article/details/82930356
公平锁和非公平锁
如果一个锁是公平的,那么获取的顺序就应该符合请求的绝对顺序,即FIFO。
测试结果
非公平性锁可能使线程“饥饿”,为什么它又被设定成默认的实现呢?再次观察上表的结果,如果把每次不同线程获取到锁定义为1次切换,公平性锁在测试中进行了10次切换,而非公平性锁只有5次切换,这说明非公平性锁的开销更小。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。
读写锁
- 之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。
在没有读写锁支持的(Java 5之前)时候,如果需要完成上述工作就要使用Java的等待通知机制,就是当写操作开始时,所有晚于写操作的读操作均会进入等待状态,只有写操作完成并进行通知之后,所有等待的读操作才能继续执行(写操作之间依靠synchronized关键进行同步),这样做的目的是使读操作能读取到正确的数据,不会出现脏读。改用读写锁实现上述功能,只需要在读操作时获取读锁,写操作时获取写锁即可。当写锁被获取到时,后续(非当前写操作线程)的读写操作都会被阻塞,写锁释放之后,所有操作继续执行,编程方式相对于使用等待通知机制的实现方式而言,变得简单明了。
- 因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWriteLock,
特性:
- 读写锁接口
热门推荐
愿“孝”不愿“顺”,代际价值观碰撞下的亲子关系重塑
阅读技巧分享与心得体会
小猫与人亲近的时机与方式(探索小猫与人亲近的秘密,培养深厚的人猫情感)
光伏发电1千瓦需要多少平方米?
黄皮果和枇杷的区别
情商低的人怎么提高情商
怀旧经典:小霸王游戏中的童年记忆与情感纽带
海外仓需求激增!背后驱动因素、机遇与运营模式全揭晓
工作族的“视”界保卫战:远离视疲劳
衣服染色全攻略:步骤、注意事项及效果实现
金价连续跳水, 专家提醒:金价进入“高波动、高风险、高预期”的新阶段
全国各地青少年禁毒知识竞赛亮点纷呈
体重管理年丨儿童青少年该怎么减重?
珠海开展清明祭英烈系列活动:400余场活动缅怀先烈,3万余人次参与
医生教你如何在家准确量血压,看完这篇就懂了
全球高校数学排名出炉!欧美高校表现出色,我国高校的实力分析
北疆奇景探秘:五彩滩之旅详解与实用指南
中医经方治眩晕
怀孕期间什么时间段服用叶酸?【医生监修】
AutoAlignV2:基于可变形特征聚合的动态多模态3D目标检测
在吃药期间能喝茶叶水吗
熟地黄:传统中药的瑰宝,解锁其药用价值
旅行箱内部收纳技巧:高效利用空间
腿疼怎么办?从病因到缓解措施全解析
至真·至诚·至深·至纯——《诗经·关雎》品读
鸡的描述有哪些?你可能不知道的鸡:全面解读鸡的描述!
上海地铁四期规划面临大洗牌,未来线路揭秘
研究揭示男性长寿老人特有的健康老化表观调控基础
姜茶的制作过程:打造健康的口感
一张治疗病毒性心肌炎的经方——炙甘草汤