公平锁与非公平锁

简介: 公平锁与非公平锁

@[toc]

锁的分类

在这里插入图片描述

什么是公平 与 非公平

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

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

为什么要有非公平锁

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

公平的情况 ReentrantLock

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

不公平的情况 ReentrantLock

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

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

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

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

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

在这里插入图片描述

相关文章
|
Java
可重入锁与非可重入锁
可重入锁与非可重入锁
938 0
可重入锁与非可重入锁
|
测试技术 API
Juc并发编程04——可重入锁、公平锁与非公平锁
1.ReentrantLock使用介绍 之前我们一直使用的Lock实例都用的是ReentrantLock,实际上,这是一种可重入锁。简单来说,就是对同一个线程可以进行多次的加锁操作
|
存储 安全 Java
aqs原理初探以及公平锁和非公平锁实现
aqs原理初探以及公平锁和非公平锁实现
323 0
Java 独占锁与共享锁、公平锁与非公平锁、可重入锁
Java 独占锁与共享锁、公平锁与非公平锁、可重入锁
|
Java
Java并发编程 - 公平锁 & 非公平锁
Java并发编程 - 公平锁 & 非公平锁
86 0
理论:第十章:公平锁,非公平锁,可重入锁,递归锁,自旋锁,读写锁,悲观锁,乐观锁,行锁,表锁,死锁,分布式锁,线程同步锁分别是什么?
理论:第十章:公平锁,非公平锁,可重入锁,递归锁,自旋锁,读写锁,悲观锁,乐观锁,行锁,表锁,死锁,分布式锁,线程同步锁分别是什么?
115 0
|
Java
锁-概念:可重入锁、可中断锁、公平锁、读写锁
可重入锁 指的是在同一个thread中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁。它是基于thread粒度的,per-thread。
1157 0
ReentrantLock可重入锁、公平锁非公平锁区别与实现原理
ReentrantLock可重入锁、公平锁非公平锁区别与实现原理
|
3月前
|
缓存 Java
java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁
本文介绍了几种常见的锁机制,包括公平锁与非公平锁、可重入锁与不可重入锁、自旋锁以及读写锁和互斥锁。公平锁按申请顺序分配锁,而非公平锁允许插队。可重入锁允许线程多次获取同一锁,避免死锁。自旋锁通过循环尝试获取锁,减少上下文切换开销。读写锁区分读锁和写锁,提高并发性能。文章还提供了相关代码示例,帮助理解这些锁的实现和使用场景。
102 4
java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁

热门文章

最新文章