java中公平锁和非公平锁的通俗解释

举一个通俗的例子来解释一下什么是公平锁和非公平锁,拿银行排队举例。


公平锁模式:


我到了银行,看看是否排队,如果不排队,则直接去柜台办理业务。(没有加锁的情况)
如果排队,则需要去前台取号,后续按照叫号依次办理业务。(加锁情况下需要排队)
这样有一个缺陷,每次叫号时,所有人都会听到声音,看一下是否到了自己的号。本来我闭目养神的,也要醒过来看一看是否到了自己,如果没有到自己,则继续闭目养神。即使叫到了我的号,我还得起身收拾一下所有材料,走到前台去办理业务,这时候柜台自然是等着我过去办理业务的,有等待时间,所以效率自然比较低。(释放锁时唤醒所有线程,线程会有一个状态切换的过程,浪费性能)
所以最终结果是很公平,但是柜台处理效率不高。(效率高,但是不公平)


非公平锁模式:


我的到了银行,如果不排序,一样直接去柜台办理业务。(没有加锁的情况)
如果排队,则我随便找一个位置坐下来。这时候又来了一个人,刚好叫号,则他直接就开始办理业务了,银行柜台没有等待时间。(有的线程不需要排队即可直接获取到锁)
即使没有恰好有人来,柜台也会叫一下有空啦,抓紧来办理业务。这时候距离最近的那个人自然快步上前办理业务,柜台就算等,等待时间也比较短,因为人家离得近呀。(有的情况下虽然排队,但不是按照顺序排队,而且是按照距CPU更适合执行的顺序来排队)
所以最终结果是虽然我先来的,却没有先办理业务。对我来说不公平,但是柜台减少了等待时间,处理业务的效率上是最快的。(效率高,但是不公平)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失落夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值