公平锁与非公平锁

简介: 公平锁与非公平锁

@[toc]

锁的分类

在这里插入图片描述

什么是公平 与 非公平

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

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

为什么要有非公平锁

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

公平的情况 ReentrantLock

如果创建 ReentrantLock对象时,参数填写为 true ,那么这就是个公平锁 依次执行

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

  • ync object for fair locks 公平锁的同步对象 方法继承了 extends Sync
  • 并且 在 if判断中,他会先获取下排队的线程

不公平的情况 ReentrantLock

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

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

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

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

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

在这里插入图片描述

相关文章
|
1月前
|
Java
JUC(11)各种锁的理解(公平锁、可重入锁、自旋锁、死锁)
这篇文章介绍了Java并发包中的各种锁机制,包括公平锁与非公平锁、可重入锁、自旋锁以及死锁的概念、实现和示例,以及如何使用jps和jstack工具来检测和诊断死锁问题。
|
3月前
|
消息中间件 设计模式 安全
深入理解AQS队列同步器原理-从ReentrantLock的非公平独占锁实现来看AQS的原理
深入理解AQS队列同步器原理-从ReentrantLock的非公平独占锁实现来看AQS的原理
|
存储 安全 Java
aqs原理初探以及公平锁和非公平锁实现
aqs原理初探以及公平锁和非公平锁实现
263 0
可重入,可打断,公平锁,条件变量原理解读
可重入,可打断,公平锁,条件变量原理解读
|
Java API 调度
图解ReentrantLock公平锁和非公平锁实现
图解ReentrantLock公平锁和非公平锁实现
124 0
图解ReentrantLock公平锁和非公平锁实现
理论:第十章:公平锁,非公平锁,可重入锁,递归锁,自旋锁,读写锁,悲观锁,乐观锁,行锁,表锁,死锁,分布式锁,线程同步锁分别是什么?
理论:第十章:公平锁,非公平锁,可重入锁,递归锁,自旋锁,读写锁,悲观锁,乐观锁,行锁,表锁,死锁,分布式锁,线程同步锁分别是什么?
ReentrantLock可重入锁、公平锁非公平锁区别与实现原理
ReentrantLock可重入锁、公平锁非公平锁区别与实现原理
|
测试技术 API
Juc并发编程04——可重入锁、公平锁与非公平锁
1.ReentrantLock使用介绍 之前我们一直使用的Lock实例都用的是ReentrantLock,实际上,这是一种可重入锁。简单来说,就是对同一个线程可以进行多次的加锁操作
Java多线程 -- 公平锁和非公平锁的一些思考
在java的锁机制中,公平和非公平的参考物是什么,个人而言觉得是相对产生的结果而立,简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁。
1334 0
|
Java
Java并发编程 - 公平锁 & 非公平锁
Java并发编程 - 公平锁 & 非公平锁
68 0