首页 > 其他分享 >ReentrantLock怎么实现公平锁的?

ReentrantLock怎么实现公平锁的?

时间:2023-10-16 19:32:03浏览次数:34  
标签:NonfairSync 实现 ReentrantLock CAS 公平 new 锁会

new ReentrantLock() 构造函数默认创建的是非公平锁 NonfairSync

public ReentrantLock() {
	sync = new NonfairSync();
}

同时也可以在创建锁构造函数中传入具体参数创建公平锁 FairSync

ReentrantLock lock = new ReentrantLock(true);
  --- ReentrantLock
  // true 代表公平锁,false 代表非公平锁
public ReentrantLock(boolean fair) {
  sync = fair ? new FairSync() : new NonfairSync();
}

FairSync、NonfairSync 代表公平锁和非公平锁,两者都是 ReentrantLock 静态内部类,只不过实现不同锁语义。

非公平锁和公平锁的两处不同:

1. 非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。

2. 非公平锁在 CAS 失败后,和公平锁一样都会进入到 tryAcquire 方法,在tryAcquire 方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,如果有则不去抢锁,乖乖排到后面。

ReentrantLock怎么实现公平锁的?_公平锁

相对来说,非公平锁会有更好的性能,因为它的吞吐量比较大。当然,非公平锁让获取锁的时间变得更加不确定,可能会导致在阻塞队列中的线程长期处于饥饿状态。

标签:NonfairSync,实现,ReentrantLock,CAS,公平,new,锁会
From: https://blog.51cto.com/u_16269508/7893038

相关文章

  • java实现大文件多线程上传案例
    当机器内存大小为4G,需要上传一个大小为50G的文件时,为了避免内存溢出,可以采用分片上传的方式,即将大文件切分成多个小片段进行并发上传。以下是一个详细的方案和代码实现示例:方案说明:将大文件切分成多个大小适当的片段(例如每个片段大小为100MB)。创建一个线程池来管理并发上传任务,......
  • js 函数如何实现策略模式与状态模式
    前言有关设计模式的学习资料中,大部分都是以java语言实现的,毕竟java作为老牌面向对象的语言最能说明设计模式的核心概念,所以js的相关设计模式的学习资料也大多使用class类实现,本文记录下js使用函数实现策略模式和状态模式设计模式的方式,更有助于理解策略模式和状态模式......
  • java中接口的实现方式
    目录Java8接口初始化的几种场景通过接口实现类的方式实现1.定义接口2.接口实现3.测试方法通过匿名内部类的来实现接口实现3.测试方法通过方法的引用1.实现通过箭头函数Lambda表达式的方式1.定义接口2.接口实现3.测试方法将接口作为方法参数1.定义一个方法2.调用方法并......
  • 用低代码打造CRM系统 实现客户个性化管理
    CRM管理思想伴随着互联网和电子商务的大潮进入中国,对企业经营管理理念产生了巨大的冲击,使中国企业逐步树立起与世界接轨的客户关系管理理念。中国CRM市场的萌芽阶段大约始于2000年,而到2010年前后,中国市场上争相涌现了一大批CRM软件厂商,国内外的CRM厂商都在为中国企业的数字化转型......
  • 第二十一篇 - vue中实现页面刷新以及局部刷新的方法
    参考链接:https://blog.csdn.net/qq_41117240/article/details/127275478第一步:在需要局部刷新的标签添加 第二步:在data里面初始化isRefresh的值为true 第三步:在method里面添加刷新函数 第四步:在需要局部刷新的地方调用刷新函数this.updateRefresh()......
  • Python实现PDF转换文件格式
    最近工作中经常遇到收到其他人提供的pdf文档,想要编辑修改下或者复制部分内容比较困难,想通过现有的pdf工具软件转换文档格式,基本都要充钱,为了免费实现pdf转换工具,网上查了下相关技术方案,整理了下代码,测试真实有效,分享下。 第一步,安装相关第三方库pipinstallPyMuPDF-ihttps:......
  • 如何用CRM销售管理系统实现销售目标?
     每个企业的销售业务都要制定目标计划,在制定销售计划时要考虑两个问题,一个是计划是否能够严格执行,另一个是计划是否可控,即明确销售目标后,合理分配时间,运用销售基本工作方法严格把控销售进度。那我们该如何用CRM销售管理系统实现销售目标? 一、制定合理销售目标制定销售目标......
  • JS实现导出Excel的五种方法详解
    <!DOCTYPEhtml><html><headlang="en"><metacharset="UTF-8"><title>html表格导出道</title><scriptlanguage="JavaScript"type="text/javascript">//第一种方法function......
  • 用低代码打造CRM系统 实现客户个性化管理
    CRM管理思想伴随着互联网和电子商务的大潮进入中国,对企业经营管理理念产生了巨大的冲击,使中国企业逐步树立起与世界接轨的客户关系管理理念。中国CRM市场的萌芽阶段大约始于2000年,而到2010年前后,中国市场上争相涌现了一大批CRM软件厂商,国内外的CRM厂商都在为中国企业的数字化转型贡......
  • 实验室信息化管理系统LIMS,实现实验室数据和信息的收集、分析、陈述和处理
    实验室信息化管理系统LIMS,由计算机硬件和应用软件组成,能够实现实验室数据和信息的收集、分析、陈述和处理。实验室信息化管理系统LIMS是以查验检测作业为中心,包含一个以样品分析为主线的从样品登录、登记处理、查验检测、数据计算分析到成果输出等流程的处理,实验室信息处理系统LIMS......