公平锁和非公平锁

在⼤多数情况下,锁的申请都是⾮公平的,也就是说,线程1⾸先请求锁A,接着线程2也请求了锁A。那么当锁A可⽤时,是线程1可获得锁还是线程2可获得锁呢?这是不⼀定的,系统只是会从这个锁的等待队列中随机挑选⼀个,因此不能保证其公平性。这就好⽐买票不排队,⼤家都围在售票窗⼝前,售票员忙的焦头烂额,也顾及不上谁先谁后,随便找个⼈出票就完事了,最终导致的结果是,有些⼈可能⼀直买不到票。⽽公平锁,则不是这样,它会按照到达的先后顺序获得资源。公平锁的⼀⼤特点是:它不会产⽣饥饿现象,只要你排队,最终还是可以等到资源的;synchronized关键字默认是有jvm内部实现控制的,是⾮公平锁。⽽ReentrantLock运⾏开发者⾃⼰设置锁的公平性。

1、为什么会有公平锁/⾮公平锁的设计为什么默认⾮公平?

  1. 恢复挂起的线程到真正锁的获取还是有时间差的,从开发⼈员来看这个时间微乎其微,但是从CPU的⻆度来看,这个时间差存在的还是很明显的。所以⾮公平锁能更充分的利⽤CPU 的时间⽚,尽量减少 CPU 空闲状态时间。
  1. 使⽤多线程很重要的考量点是线程切换的开销,当采⽤⾮公平锁时,当1个线程请求锁获取同步状态,然后释放同步状态,因为不需要考虑是否还有前驱节点,所以刚释放锁的线程在此刻再次获取同步状态的概率就变得⾮常⼤,所以就减少了线程的开销。

2、使⽤公平锁会有什么问题

公平锁保证了排队的公平性,⾮公平锁霸⽓的忽视这个规则,所以就有可能导致排队的⻓时间在排队,也没有机会获取到锁,这就是传说中的 “锁饥饿”

3、什么时候⽤公平?什么时候⽤⾮公平?

如果为了更⾼的吞吐量,很显然⾮公平锁是⽐较合适的,因为节省很多线程切换时间,吞吐量⾃然就上去了;否则那就⽤公平锁,⼤家公平使⽤。

posted @   会秃头的小白  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
原来你也在这里 - 周笔畅
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 姚谦

作曲 : 中島みゆき

编曲 : Terence Teo

制作人 : 朱敬然

请允许我尘埃落定

请允许我尘埃落定

用沉默埋葬了过去

满身风雨我从海上来

才隐居在这沙漠里

该隐瞒的事总清晰

千言万语只能无语

爱是天时地利的迷信

喔 原来你也在这里

啊 那一个人

是不是只存在梦境里

为什么我用尽全身力气

却换来半生回忆

若不是你渴望眼睛

若不是我救赎心情

在千山万水人海相遇

喔 原来你也在这里

请允许我尘埃落定

请允许我尘埃落定

用沉默埋葬了过去

满身风雨我从海上来

才隐居在这沙漠里

该隐瞒的事总清晰

千言万语只能无语

爱是天时地利的迷信

喔 原来你也在这里

啊 那一个人

是不是只存在梦境里

为什么我用尽全身力气

却换来半生回忆

若不是你渴望眼睛

若不是我救赎心情

在千山万水人海相遇

喔 原来你也在这里

啊 那一个人

啊 那一个人

是不是只存在梦境里

为什么我用尽全身力气

却换来半生回忆

若不是你渴望眼睛

若不是我救赎心情

在千山万水人海相遇

喔 原来你也在这里

该隐瞒的事总清晰

千言万语只能无语

爱是天时地利的迷信

喔 原来你也在这里

OT: AISARERU HANA AISAREXIU HANA

OT: AISARERU HANA AISAREXIU HANA

(中文版:原来你也在这里)

OP: Yamaha Music Publishing Inc

SP:百代音乐版权代理(北京)有限公司

配唱制作人:翁乙仁

点击右上角即可分享
微信分享提示