公平锁与非公平锁

简介: 公平锁与非公平锁

@[toc]

锁的分类

在这里插入图片描述

什么是公平 与 非公平

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

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

为什么要有非公平锁

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

公平的情况 ReentrantLock

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

不公平的情况 ReentrantLock

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

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

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

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

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

在这里插入图片描述

相关文章
|
2月前
|
缓存 Java
java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁
本文介绍了几种常见的锁机制,包括公平锁与非公平锁、可重入锁与不可重入锁、自旋锁以及读写锁和互斥锁。公平锁按申请顺序分配锁,而非公平锁允许插队。可重入锁允许线程多次获取同一锁,避免死锁。自旋锁通过循环尝试获取锁,减少上下文切换开销。读写锁区分读锁和写锁,提高并发性能。文章还提供了相关代码示例,帮助理解这些锁的实现和使用场景。
java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁
|
5月前
|
安全 Java
【多线程面试题十九】、 公平锁与非公平锁是怎么实现的?
这篇文章解释了Java中`ReentrantLock`的公平锁和非公平锁的实现原理,其中公平锁通过检查等待队列严格按顺序获取锁,而非公平锁允许新线程有更高机会立即获取锁,两者都依赖于`AbstractQueuedSynchronizer`(AQS)和`volatile`关键字以及CAS技术来确保线程安全和锁的正确同步。
【多线程面试题十九】、 公平锁与非公平锁是怎么实现的?
|
5月前
|
Java
JUC(11)各种锁的理解(公平锁、可重入锁、自旋锁、死锁)
这篇文章介绍了Java并发包中的各种锁机制,包括公平锁与非公平锁、可重入锁、自旋锁以及死锁的概念、实现和示例,以及如何使用jps和jstack工具来检测和诊断死锁问题。
|
存储 安全 Java
aqs原理初探以及公平锁和非公平锁实现
aqs原理初探以及公平锁和非公平锁实现
317 0
|
Java API 调度
图解ReentrantLock公平锁和非公平锁实现
图解ReentrantLock公平锁和非公平锁实现
153 0
图解ReentrantLock公平锁和非公平锁实现
理论:第十章:公平锁,非公平锁,可重入锁,递归锁,自旋锁,读写锁,悲观锁,乐观锁,行锁,表锁,死锁,分布式锁,线程同步锁分别是什么?
理论:第十章:公平锁,非公平锁,可重入锁,递归锁,自旋锁,读写锁,悲观锁,乐观锁,行锁,表锁,死锁,分布式锁,线程同步锁分别是什么?
111 0
Java多线程 -- 公平锁和非公平锁的一些思考
在java的锁机制中,公平和非公平的参考物是什么,个人而言觉得是相对产生的结果而立,简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁。
1368 0
ReentrantLock可重入锁、公平锁非公平锁区别与实现原理
ReentrantLock可重入锁、公平锁非公平锁区别与实现原理
|
测试技术 API
Juc并发编程04——可重入锁、公平锁与非公平锁
1.ReentrantLock使用介绍 之前我们一直使用的Lock实例都用的是ReentrantLock,实际上,这是一种可重入锁。简单来说,就是对同一个线程可以进行多次的加锁操作
|
Java
Java并发编程 - 公平锁 & 非公平锁
Java并发编程 - 公平锁 & 非公平锁
83 0