语义:

1.公平锁:每个线程在获取锁的时候,会先检查该锁维护的等待队列,如果该队列是空或者当前线程是第一个,则占有锁,否则按照FIFO的原则,进入等待队列,等待获取锁;

2.非公平锁:当前线程在获取锁的时候,不管该锁的维护队列种是否有其它等待线程,直接CAS,如果cas失败,则再执行公平锁的那一套;

源码比较如下:
公平锁:

        final void lock() {acquire(1);}

非公平锁:

        final void lock() {if (compareAndSetState(0, 1))  //先尝试获取锁setExclusiveOwnerThread(Thread.currentThread());elseacquire(1);//获取锁失败,再采用公平锁的方式;}

关于锁的释放,公平锁与非公平锁是一样的:

    public final boolean release(int arg) {if (tryRelease(arg)) {Node h = head;if (h != null && h.waitStatus != 0)unparkSuccessor(h);return true;}return false;}

关于公平锁与非公平锁的更底层的一些东西,比如volatile的使用,因为涉及到native方法,暂时没有深究。

转载于:https://www.cnblogs.com/zqsky/p/7899195.html

公平锁与非公平锁源码对比相关推荐

  1. ReentrantLock 公平锁和非公平锁加锁和解锁源码分析(简述)

    - title: ReentrantLock 公平锁和非公平锁加锁和解锁源码分析(简述) - date: 2021/8/16 文章目录 一.ReentrantLock 1. 构造函数 二.Reentr ...

  2. 闲聊AQS面试和源码解读---可重入锁、LockSupport、CAS;从ReentrantLock源码来看公平锁与非公平锁、AQS到底是怎么用CLH队列来排队的?

    AQS原理可谓是JUC面试中的重灾区之一,今天我们就来一起看看AQS到底是什么? 这里我先整理了一些JUC面试最常问的问题? 1.Synchronized 相关问题以及可重入锁 ReentrantLo ...

  3. java公平所与非公平所_一张图读懂Java非公平锁与公平锁

    前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820- 种一棵树最好的时间是十年前,其次是现在 我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Ja ...

  4. 深入分析ReentrantLock公平锁和非公平锁的区别 (转)

    在ReentrantLock中包含了公平锁和非公平锁两种锁,通过查看源码可以看到这两种锁都是继承自Sync,而Sync又继承自AbstractQueuedSynchronizer,而AbstractQ ...

  5. ReentrantLock与公平锁、非公平锁实现

    前言  最近开始读JDK源码,所有心得准备总结成一个专栏,JDK Analysis系列的第一篇,就从万众瞩目的ReentrantLock开始吧,而谈到ReentrantLock,就不得不说AQS,它是 ...

  6. 【JUC并发编程06】多线程锁 (公平锁和非公平锁,死锁,可重锁)

    文章目录 6 多线程锁 (公平锁和非公平锁,死锁,可重锁) 6.1 synchronized 锁的八种情况 6.2 对上述例子的总结 6.3 公平锁和非公平锁 6.4 可重入锁 6.5 死锁 6 多线 ...

  7. Java进阶:ReentrantLock实现原理解析(公平锁、非公平锁、可重入锁、自旋锁)

    概述 本篇将介绍公平锁.非公平锁.可重入锁.自旋锁相关理论知识,同时结合相关源码和Demo进行解析,主要是以ReentrantLock作为例子. 公平锁 公平锁定义 公平锁是指线程按照申请所的顺序来获 ...

  8. kali锁屏后无法唤醒_面试官:说一下公平锁和非公平锁的区别?

    前言 上次我们提到了乐观锁和悲观锁,那我们知道锁的类型还有很多种,我们今天简单聊一下,公平锁和非公平锁两口子,以及他们在我们代码中的实践. 正文 开始聊之前,我先大概说一下他们两者的定义,帮大家回顾或 ...

  9. reentrantlock非公平锁不会随机挂起线程?_【原创】Java并发编程系列16 | 公平锁与非公平锁...

    本文为何适原创并发编程系列第 16 篇,文末有本系列文章汇总. 上一篇提到重入锁 ReentrantLock 支持两种锁,公平锁与非公平锁.那么这篇文章就来介绍一下公平锁与非公平锁. 为什么需要公平锁 ...

最新文章

  1. vasp算表面吸附流程_VASP实例分析表面吸附计算
  2. 分布式存储的三个基本问题
  3. 为什么 Go 模块在下游服务抖动恢复后,CPU 占用无法恢复
  4. ABAP Netweaver和Cloud Foundry上的环境变量Environment Variable
  5. content-type对照表
  6. AcWing.282石子合并(区间DP)题解
  7. ySQL性能优化的21个最佳实践 和 mysql使用索引
  8. scrapy -selector
  9. RK3568-ANDROID11-4G-EC20-驱动篇(移远模块)
  10. image.getSubimage(x, y, width, height)函数解析
  11. Graph Meta Network for Multi-Behavior Recommendation精读
  12. 高性能服务器设计——常用网络服务器设计模型
  13. c语言中calloc是什么意思,C语言中malloc和calloc以及relloc函数的区别
  14. 缓存击穿和雪崩常用解决方案
  15. 英语笔记(单词来自Shiro文档)02
  16. 《个人金融信息保护技术规范》JRT 0171-2020专家解读(转自中国存储网)
  17. #入坑keychron#Macbook外置机械键盘的不二之选-keychron
  18. 多可系统如何增加新用户到工作组
  19. 酷开与鸿蒙哪个好用,上手说说创维电视与酷开有区别没有?哪个好?老司机透漏评测...
  20. Xilinx ZYNQ开发板资料共享

热门文章

  1. 海龟绘图画花朵_我家宝宝最喜欢的一本图画书——我的连衣裙
  2. fastadmin弹框提示不起作用 confirm
  3. ubuntu 更新软件
  4. HMM、MEMM、CRF模型比较和标注偏置问题(Label Bias Problem)
  5. Atitit. atiJavaExConverter4js  新的特性
  6. 念 2013-8-6 (写于爸爸走之后,之七)
  7. (转)编写可重入和线程安全的代码(Writing Reentrant and Thread-Safe Code)
  8. 此心拖泥带水,是人生最苦处
  9. java B2B2C springmvc mybatis电子商务平台源码-Spring Cloud Security
  10. 前线观察 | AWS re:Invent 2018见闻实录