【锁思想】为什么synchronized的默认策略是非公平的?

在技术日新月异的今天,真正应该花费时间学习的是那些不变的编程思想,那么今天我们来聊一下公平和非公平策略的思想,前几天看到一个问题”为什么synchronized是非公平的“,我仔细的思考了一下,发现不只是synchronized, ReentrantLock 的默认策略也是非公平的,非公平是实现锁的一种策略,不只是Java,其他语言的默认锁机制也都是非公平的,那么今天我们来详细的聊一下 ”为什么各种语言中锁实现的默认策略都是非公平的“ 。这个非公平是真的完全不公平随机获取的么?

公平和非公平

首先,我们来看下什么是公平锁和非公平锁,为了能让大家更清楚,我们用图例来说明一下公平和非公平的场景。

公平锁的场景

我们先看一下公平锁的场景,顾名思义,公平锁指的就是按照线程请求的顺序来分配锁; 比如,我们给临界区加了一个公平锁,此时有3个线程先后来请求锁,线程1先到,就会先获得锁,那么线程2,3会在队列中等待,等线程1释放锁后,线程2,3会依次去获得锁,如果此时有线程4来竟争锁,会排在线程2,3的后面等待。

然后等线程 1 释放锁之后,线程 2、3、4 会依次去获取这把锁,线程 2 先获取到的原因是它等待的时间最长。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值