公平锁和非公平锁及读写锁
创作时间:
作者:
@小白创作中心
公平锁和非公平锁及读写锁
引用
CSDN
1.
https://blog.csdn.net/hyf_home/article/details/82930356
公平锁和非公平锁
如果一个锁是公平的,那么获取的顺序就应该符合请求的绝对顺序,即FIFO。
测试结果
非公平性锁可能使线程“饥饿”,为什么它又被设定成默认的实现呢?再次观察上表的结果,如果把每次不同线程获取到锁定义为1次切换,公平性锁在测试中进行了10次切换,而非公平性锁只有5次切换,这说明非公平性锁的开销更小。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。
读写锁
- 之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。
在没有读写锁支持的(Java 5之前)时候,如果需要完成上述工作就要使用Java的等待通知机制,就是当写操作开始时,所有晚于写操作的读操作均会进入等待状态,只有写操作完成并进行通知之后,所有等待的读操作才能继续执行(写操作之间依靠synchronized关键进行同步),这样做的目的是使读操作能读取到正确的数据,不会出现脏读。改用读写锁实现上述功能,只需要在读操作时获取读锁,写操作时获取写锁即可。当写锁被获取到时,后续(非当前写操作线程)的读写操作都会被阻塞,写锁释放之后,所有操作继续执行,编程方式相对于使用等待通知机制的实现方式而言,变得简单明了。
- 因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWriteLock,
特性:
- 读写锁接口
热门推荐
2024最火的土味情话,甜到心里去
沙中土命是什么意思
如何查看和分析电脑日志文件的详细步骤与技巧
Win11查看系统日志?教你找到系统日志的位置
企业资金回笼全攻略:五大方法助力现金流管理
β2微球蛋白偏高的意义
【专题报告】加菜籽被反倾销调查,中加菜系供需面临再平衡
考古重庆③|巴人与盐
大额存单和国债的区别?怎么选?
专家解读:芬太尼属于几级镇痛药?
如何评估和选择低估值股票?这些低估值股票有哪些潜在的风险和策略?
北京海淀发力量子信息产业 争夺量子产业第一城
如何在纸飞机中探索频道功能
清明的缅怀丨饶宗颐:国学大师,中国学界泰斗、“北季南饶”
政策丨全国新能源汽车充换电设施补贴集锦(8-9月)
知识管理策略怎么制定最有效?
如何科学养护宠物娃娃鱼(以饲养方法为中心)
钢丝螺套安装方法及选择要点
美国历史上最具影响力的100位大人物,前10名都是谁?
粉丝是先煮还是先用水泡 粉丝用冷水泡还是热水泡
春季月季如何施肥?施肥时间和施肥方法
全国公共英语等级考试是什么?
隐藏在《木兰辞》背后的民族交融
温婉•飒爽•唯美,郭新雨笔下的娥眉千面
如何正确设置显示器的刷新率
30帧和60帧的区别 视频30帧和60帧有什么不一样
中南大学团队突破轻质难熔高熵合金设计难题:数据驱动实现性能优化
探索职业本科高质量发展新路径
上市白酒企业迎来新"老三" 山西汾酒这次能守多久?
装修施工时间几点到几点?合理安排装修时间,避免邻里纠纷