卖票问题
我们现在有五个售票员
五个线程分别卖票
卖票
ReentrantLock();
运行后全是 a 对象获取
非公平锁缺点之一
容易出现锁饥饿
默认是使用的非公平锁
也可以传入一个 true 参数
使其变成公平锁
生活中排队讲求先来后到 视为公平
程序中的公平性也是符合请求锁的绝对时间
其实就是 FIFO
否则视为不公平
为什么默认是非公平的
左边是公平的版本
右边是非公平的版本
非公平锁是直接抢占
而公平锁要判断同步队列是否有先驱节点存在
如果没有先驱节点才能获取锁
非公平锁源码
公平锁源码
原因
如果是为了更高的吞吐量
很显然非公平锁是比较合适的
因为节省了很多线程切换时间
吞吐量自然就上去了
否则那就用公平锁 大家公平使用