公平锁与非公平锁

@[toc]

锁的分类

在这里插入图片描述

什么是公平 与 非公平

  • 公平是按照线程的请求顺序,来分配锁 非公平是指不完全按照请求的顺序,在一定情况下,可以插队的

注意:非公平也同样不提倡 插队行为,这里的非公平是指在合适的时机插队,而不是盲目的插队

为什么要有非公平锁

  • ava设计者 这样设计的目的,是为了提高效率 避免唤醒带来的空档期

公平的情况 ReentrantLock

如果创建 ReentrantLock对象时,参数填写为 true ,那么这就是个公平锁 依次执行 在这里插入图片描述

在这里插入图片描述

  • 我们可以看下ReentrantLock 源码 官方的解释是当为true的时候 就是公平策略 是个三母运算符 为 true则新建个 FairSync()方法 在这里插入图片描述

  • ync object for fair locks 公平锁的同步对象 方法继承了 extends Sync

  • 并且 在 if判断中,他会先获取下排队的线程

不公平的情况 ReentrantLock

线程1 获取锁,释放锁,线程2在排队等待获取锁,但是线程5 突然插队拿到锁,这就是非公平锁,线程2还没来得及获取锁,

ReentrantLock 默认的就是非公平策略 通过源码可以发现

在这里插入图片描述 三目 默认走的是false ,非公平锁策略 在这里插入图片描述 在这里插入图片描述

  • 公平锁不同的是 ,他不会获取正在排队的线程

对比公平锁,非公平锁的优点和缺点

在这里插入图片描述

end
  • 作者:yxl(联系作者)
  • 发表时间:2020-08-11 15:42
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论