@[toc]
锁的分类
什么是公平 与 非公平
- 公平是按照线程的请求顺序,来分配锁 非公平是指不完全按照请求的顺序,在一定情况下,可以插队的
注意:非公平也同样不提倡 插队行为,这里的非公平是指在合适的时机插队,而不是盲目的插队
为什么要有非公平锁
- ava设计者 这样设计的目的,是为了提高效率
避免唤醒带来的空档期
公平的情况 ReentrantLock
如果创建 ReentrantLock对象时,参数填写为 true ,那么这就是个公平锁 依次执行
- 我们可以看下ReentrantLock 源码 官方的解释是当为true的时候 就是公平策略
是个三母运算符 为 true则新建个 FairSync()方法
- ync object for fair locks 公平锁的同步对象 方法继承了 extends Sync
- 并且 在 if判断中,他会先获取下排队的线程
不公平的情况 ReentrantLock
线程1 获取锁,释放锁,线程2在排队等待获取锁,但是线程5 突然插队拿到锁,这就是非公平锁,线程2还没来得及获取锁,
ReentrantLock 默认的就是非公平策略
通过源码可以发现
三目 默认走的是false ,非公平锁策略
- 公平锁不同的是 ,他不会获取正在排队的线程