公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。
优点:所有的线程都能得到资源,不会饿死在队列中。
缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。
非公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。
优点:可以减少CPU唤醒线程的开销,整体的吞吐效率会高点,CPU也不必取唤醒所有线程,会减少唤起线程的数量。
缺点:你们可能也发现了,这样可能导致队列中间的线程一直获取不到锁或者长时间获取不到锁,导致饿死。

公平锁和非公平锁的性能差异相关推荐

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

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

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

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

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

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

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

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

  5. java非公平锁_Java多线程 -- 公平锁和非公平锁的一些思考

    在java的锁机制中,公平和非公平的参考物是什么,个人而言觉得是相对产生的结果而立,简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁.相反,如果保证不了每个线程都能拿到锁, ...

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

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

  7. JAVA并发篇_公平锁与非公平锁

    简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁.相反,如果保证不了每个线程都能拿到锁,也就是存在有线程饿死,那么这个锁就是非公平锁. 一.引入概念 1.公平锁: 多个线程 ...

  8. 公平锁非公平锁的实际使用_理解ReentrantLock的公平锁和非公平锁

    学习AQS的时候,了解到AQS依赖于内部的FIFO同步队列来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成一个Node对象并将其加入到同步队列,同时会阻塞当 ...

  9. java公平锁和非公平锁_java并发编程学习之再谈公平锁和非公平锁

    在java并发编程学习之显示锁Lock里有提过公平锁和非公平锁,我们知道他的使用方式,以及非公平锁的性能较高,在AQS源码分析的基础上,我们看看NonfairSync和FairSync的区别在什么地方 ...

  10. 【公平锁和非公平锁有什么区别?】

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

最新文章

  1. python输入函数后无法运行_python - 如何在函数运行期间忽略所有用户输入?_python_酷徒编程知识库...
  2. VMware与Hyper-V
  3. Linux环境变量隔代,python基础题 - osc_vwtuqll7的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. AVL树平衡旋转详解
  5. 《实用》secureCRT远程连接linux虚拟机-突然连接不上-解决办法
  6. 秒后面的单位是什么_比光年还大的长度单位,你知道几个?
  7. systemd 开机无法启动privoxy
  8. Android Jetpack 之 ViewModel
  9. 使用POI读取word文档
  10. 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...
  11. WebFrom 【文件上传】
  12. 深入解密来自未来的缓存-Caffeine
  13. 最新开源:BundleTrack - 无需任何CAD模型的6D物体姿态跟踪算法(谷歌X实习生)...
  14. 活动目录的介绍:深入浅出Active Directory系列(一)
  15. 图解设计模式:行为型模式之观察者模式
  16. 有道智云实时语音翻译服务全新上线,86+语言实时翻译!
  17. 科目三考试技巧全总结
  18. ajax导致服务端线程粘滞,解决js ajax同步请求造成浏览器假死的问题
  19. Vue keep-alive组件缓存 基础用法
  20. numpy的getA()/getA1()/getH()/getI()函数

热门文章

  1. JavaScript字符串倒序输出
  2. c语言递归将字符串abcde倒序输出,请教C语言字符串倒序输出
  3. 悟空crm二次开发增加 公文管理功能
  4. Vue3项目移动端适配方案
  5. Deity Pocket Wireless 无线话筒功能介绍
  6. 任务一:零基础HTML编码练习
  7. 独立按键和矩阵按键c语言,第八章 独立按键和矩阵按键
  8. 博士申请 | 美国弗吉尼亚理工贾若溪老师课题组招收机器学习方向博士生
  9. 微分方程建模Matlab代码总结
  10. 这些神奇的AI智能机器人很早就已出现过,你确定你不了解?