公平锁和非公平锁及读写锁
创作时间:
作者:
@小白创作中心
公平锁和非公平锁及读写锁
引用
CSDN
1.
https://blog.csdn.net/hyf_home/article/details/82930356
公平锁和非公平锁
如果一个锁是公平的,那么获取的顺序就应该符合请求的绝对顺序,即FIFO。
测试结果
非公平性锁可能使线程“饥饿”,为什么它又被设定成默认的实现呢?再次观察上表的结果,如果把每次不同线程获取到锁定义为1次切换,公平性锁在测试中进行了10次切换,而非公平性锁只有5次切换,这说明非公平性锁的开销更小。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。
读写锁
- 之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。
在没有读写锁支持的(Java 5之前)时候,如果需要完成上述工作就要使用Java的等待通知机制,就是当写操作开始时,所有晚于写操作的读操作均会进入等待状态,只有写操作完成并进行通知之后,所有等待的读操作才能继续执行(写操作之间依靠synchronized关键进行同步),这样做的目的是使读操作能读取到正确的数据,不会出现脏读。改用读写锁实现上述功能,只需要在读操作时获取读锁,写操作时获取写锁即可。当写锁被获取到时,后续(非当前写操作线程)的读写操作都会被阻塞,写锁释放之后,所有操作继续执行,编程方式相对于使用等待通知机制的实现方式而言,变得简单明了。
- 因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWriteLock,
特性:
- 读写锁接口
热门推荐
USNews vs QS:留学党必看的大学排名指南
南极之旅,你应该了解的那些事
黑车非法营运罪的认定标准及打击策略
公司打仲裁会怎么样:法律后果、程序及影响全解析
“行拘”和“刑拘”,有什么不同?有什么意义?
员工考评表中的评分标准如何制定才能公平?
最新研究发现:高摄入西兰花可降低36%的癌症风险
数据库日期查询最佳实践:从标准化到性能优化
专题 | Bosssoft:助力电子凭证业务革新,加速会计数字化转型
妇科B超什么时候做是最佳时间
Shell脚本中if语句的用法及实例详解
最新模拟揭示超新星冲击爆发的物理学原理
如何选择电商平台来建立电商网站
十款免费策略游戏推荐:让你玩到停不下来!
【量化策略】动量追踪策略
欠款500万起诉成立要判多少年
叶轮用什么编程软件好一些
汉匈交锋:汉武帝北击匈奴,铸就历史新篇章
如何使用工程考勤管理软件进行施工人员管理?
不续签合同年金怎么处理
遇到绑架时如何实施正当防卫
定期对家里进行断舍离幸福提升一倍
天外飞仙——白鹤
不敌中国车,日本车企巨头"新动作"
如何正确换算汽车匹和马力?这种换算对车辆性能有什么影响?
汽车马力的计算:从公式到实际应用的全解析
CentOS Root密码管理指南:设置、修改与恢复
基于树莓派的疲劳驾驶检测系统设计与实现
回顾:“最励志糖友”李鑫,智商倒数却成中考状元,复读考上清华
正念冥想:心灵的静谧之旅