Java锁之公平和非公平锁


目录

  1. 公平锁和非公平锁概念
  2. 公平锁和非公平锁区别
  3. ReentrantLock和synchronized是公平锁还是非公平锁?

1. 公平锁和非公平锁概念


  1. 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。
  2. 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象

2. 公平锁和非公平锁区别


  1. 公平锁:Threads acquire a fair lock in which they requested
  2. 公平锁:就是很公平,在并发坏境中.每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁.否则就会加入到等待队列中.以后会按照FIFO的规则从队列中取到自己。
  3. 非公平锁:a nonfair lock permis barging:threads requesting a lock can jump ahead of the queue of waiting threads if the lock
    happens to be available when it is requested.
  4. 非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式。

3. ReentrantLock和synchronized是公平锁还是非公平锁?


  1. Java ReentrantLock 而言,通过构造函数指定该锁是否为公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。源码如下
 Lock lock = new ReentrantLock();

点进去源码截图:

默认为非公平锁,当我们传入true参数后,源码为

Lock lock = new ReentrantLock(true);

点进去源码为:

  1. 对于synchronized而言,也是一种非公平锁

Java锁之公平和非公平锁相关推荐

  1. java并发编程(三十五)——公平与非公平锁实战

    前言 在 java并发编程(十六)--锁的七大分类及特点 一文中我们对锁有各个维度的分类,其中有一个维度是公平/非公平,本文我们来探讨下公平与非公平锁. 公平|非公平 首先,我们来看下什么是公平锁和非 ...

  2. Java多线程学习十五:公平锁和非公平锁,为什么要“非公平”?

    什么是公平和非公平 公平锁 指的是按照线程请求的顺序,来分配锁: 非公平锁 指的是不完全按照请求的顺序,在一定情况下,可以允许插队.但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而 ...

  3. 云阶月地,关锁千重(一.公平和非公平)

    看到文章的标题是不是很诧异,一个搞技术的为什么要搞这么文艺的话题呢?标题说关锁千重,是不是很形象,我们在开发中的锁不也是多种多样么? Lock 既然之前说了锁千重,那锁到底有多少种,他们的分类又是怎么 ...

  4. 24-讲一讲公平锁和非公平锁,为什么要“非公平”?

    什么是公平和非公平 首先,我们来看下什么是公平锁和非公平锁,公平锁指的是按照线程请求的顺序,来分配锁:而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队.但需要注意这里的非公平并不是指完 ...

  5. 公平锁和非公平锁-ReentrantLock是如何实现公平、非公平的

    转载:https://www.jianshu.com/p/5104cd94dbe0 1.什么是公平锁与非公平锁 公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁. 非公平锁:非 ...

  6. java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)

    1.公平锁.非公平锁 2.可重入锁(递归锁) 3.自旋锁 AtomicReference atomicReference = new AtomicReference();//原子引用线程 下面代码5秒 ...

  7. java公平索非公平锁_Java 并发编程中使用 ReentrantLock 替代 synchronized

    Java 5 引入的 Concurrent 并发库软件包中,提供了 ReentrantLock 可重入同步锁,用来替代 synchronized 关键字原语,并可提供更好的性能,以及更强大的功能.使用 ...

  8. java公平索非公平锁_java中的非公平锁不怕有的线程一直得不到执行吗

    首先来看公平锁和非公平锁,我们默认使用的锁是非公平锁,只有当我们显示设置为公平锁的情况下,才会使用公平锁,下面我们简单看一下公平锁的源码,如果等待队列中没有节点在等待,则占有锁,如果已经存在等待节点, ...

  9. 乐观锁、悲观锁和公平、非公平

    今天心情:我是一个程序员,现在已经走向了逼不得已通过写文章赚取流量来谋生的道路.可是现在流量惨淡,可是我并不惊慌.奥里给. 详细内容链接地址:https://zhuanlan.zhihu.com/p/ ...

最新文章

  1. 寻找数组中最小的k个数(快排和堆排)
  2. Mysql 图像二进制保存-Blocb、TinyBlob、MediumBlob、LongBlob
  3. 职业学校计算机主要学什么条件,职业学校计算机教学计划
  4. centOS 6.4 vsftpd 500 illegal port command
  5. linux shell 多线程执行程序
  6. 无法在驱动器0分区上安装windows 解决方法
  7. 分享一些Java常见的面试题,大厂都爱用
  8. Android输入法
  9. 【转】android开发 dts、各种接口porting----不错
  10. 计算机未安装OCR应用程序,OCR使用的常见问题及解决(转载)
  11. 流媒体 - 02 常用命令(gst+ffmpeg+v4l2)
  12. mysql两个等号是什么运算符_什么是MySQL中的这个运算符=?
  13. 《麦肯锡工作法》读书分享
  14. 苹果发布无线充新专利,苹果Find My技术成为近几年苹果的重要创新
  15. 小型餐饮管理系统(c++/win32 SDK/MYSQL 数据库)
  16. 类似新浪微博评论的 @ 及 #某话题# 功能的实现
  17. Jackson,Gson,Fastjson 的对比
  18. IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象
  19. MySQL 查询排名
  20. SQL——分组统计查询

热门文章

  1. 51CTO学院四周年-成长之路
  2. 关于Redis与关系型数据的一些区别
  3. 防止P2P终结者的方法
  4. 关于CKeditor的个性应用设置 转
  5. JAVA/JSP学习系列之Resin+Apache安装
  6. ASP.NET MVC 实现多文件上传
  7. 牛客多校2 - Cover the Tree(dfs序)
  8. ssh、私钥、密钥理解
  9. php中如何固定表格宽度,实例讲解DataTables固定表格宽度(设置横向滚动条)
  10. pcb地线应该不应该做成环路_干货|图文详解EMC的PCB设计技术