在多线程编程中,锁是一种常见的同步机制,可以用来保证多个线程之间的互斥访问。公平锁和非公平锁是锁的两种实现方式,它们的区别主要体现在获取锁的方式上。

公平锁

公平锁是指多个线程按照请求锁的顺序获取锁,即先到先得的原则。在公平锁中,如果有多个线程等待获取锁,那么锁会依次分配给等待时间最长的线程,这样可以避免线程饥饿的情况。公平锁的实现比较复杂,需要维护一个线程等待队列,因此性能会比较低。

非公平锁

非公平锁是指多个线程按照竞争获取锁的顺序获取锁,即先到不一定先得的原则。在非公平锁中,如果有多个线程等待获取锁,那么锁可能会直接分配给等待时间较短的线程,这样可能会导致一些线程一直无法获取锁,出现线程饥饿的情况。非公平锁的实现比较简单,不需要维护一个线程等待队列,因此性能会比较高。

总的来说,公平锁和非公平锁的选择取决于应用场景和需求。如果需要保证多个线程获取锁的顺序,可以选择公平锁;如果需要提高锁的性能,可以选择非公平锁。

【公平锁和非公平锁有什么区别?】相关推荐

  1. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

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

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

  3. java投票锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...

  4. java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家取排队本着先来 ...

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

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

  6. 公平锁与非公平锁源码对比

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

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

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

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

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

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

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

  10. 线程调度、公平锁和非公平锁、乐观锁和悲观锁、锁优化、重入锁

    1. 线程调度 线程调度指的就是给线程分配使用处理器的过程.主要的调度方式有两种:协同式调度和抢占式调度. 1.1 协同式调度 线程完成自己的任务之后主动通知系统切换到另一个线程上. 优点: 实现简单 ...

最新文章

  1. 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...
  2. 得到的概率值_论文推荐|屋面钢梁在超强意外雪荷载作用下的失效概率
  3. 9.1 ps:查看进程
  4. 微服务探索与实践—总述
  5. axios请求报Uncaught (in promise) Error: Request failed with status code 404
  6. 转转钓鱼php,最新转转钓鱼源码程序网站微信:mm88wk 最新转转源码 - 下载 - 搜珍网...
  7. php与mysql实例教程_mysql实例与连接
  8. python包的初始与日志模块
  9. Oracle fgs(精细审计)使用
  10. 简单的amr转换mp3音频格式转换方法
  11. SolidWorks2010
  12. Altium designer—STM32F103ZET6最小系统原理图
  13. 高级筛选英语或计算机分数大于85,WPS:如何在WPS中高级筛选分析学生成绩?
  14. H3C路由器清空ARP表
  15. python为啥爬取数据会有重复_使用python爬取B站千万级数据
  16. Appops权限管理
  17. python pandas多条件筛选
  18. 【T+】畅捷通T+选项设置界面没有“数据精度”调整项
  19. GOOGLE 人机验证(RECAPTCHA)无法显示解决方案(可解决大多数 CSP 问题)
  20. C语言零基础,入门应该知道的事

热门文章

  1. 2022年RocketMQ面试题及答案
  2. CF Div2 781
  3. Schnorr技术详解
  4. 【git】git 命令行删除远程仓库
  5. 【数据结构】栈-C语言版
  6. 【PCIE】PCIE TLP包解析
  7. 解决:Unknown column ‘a.userId‘ in ‘field list‘
  8. win7mysql5.7.25安装教程_win7下MySql 5.7安装配置方法图文教程
  9. 基于C语言设计的小型图形软件系统
  10. idea中摸鱼插件_上班防摸鱼插件(知乎页面)