当前位置:

首页 > 编程开发 > 为什么 ReentrantLock 默认使用非公平锁?对比其在高并发竞争下的 CPU 调度吞吐差异。

为什么 ReentrantLock 默认使用非公平锁?对比其在高并发竞争下的 CPU 调度吞吐差异。

ReentrantLock默认采用非公平锁,通过直接CAS抢锁绕过AQS队列,减少上下文切换与缓存竞争,高并发下吞吐提升20%–30%。公平锁强制volatile队列检查,临界区短或核数多时开销占比可达12%–18%。默认非公平是性能优先选择,公平模式需接受吞吐折损与延迟抖动。

先抛出结论:ReentrantLock 默认选择非公平锁,绝不是设计上的疏忽,而是在高并发场景下,用可接受的公平性代价换取了实实在在的吞吐提升——实测中通常能带来 20%–30% 的性能优势。至于“线程饥饿”的理论风险,在绝大多数实际业务中几乎不会触发。

那么,非公平锁在 lock() 这一步到底比公平锁快在哪?核心差异藏在第一步:是否绕过 AQS 队列直接抢锁。

NonfairSync 的 lock() 方法一上来就是 compareAndSetState(0, 1)——只要 state 为 0(锁空闲),新线程就能“插队”成功,完全跳过入队、唤醒、上下文切换这一整套开销。而 FairSync 的 lock() 则会优先调用 acquire(1),然后进入 tryAcquire(),里面第一件事就是检查当前线程是否排在队首:!hasQueuedPredecessors()。哪怕锁刚刚被释放,只要队列里还有等待者,新线程也得老老实实排队。

这一步看似微小,但在锁争抢激烈时会被急剧放大:

  • CPU 缓存行竞争更少:非公平锁减少了对 AQS 队列 head/tail 节点的频繁读写;
  • 上下文切换更少:避免了线程刚入队就被唤醒的“虚假唤醒”或“唤醒滞后”;
  • 指令流水线更友好:在 CAS 失败率较低时,分支预测成功率高,CPU 不易停顿。

公平锁的 hasQueuedPredecessors() 带来什么开销?

hasQueuedPredecessors() 看起来只是一次链表头尾判断,但它的代价远不止表面。因为它强制每次加锁前都要访问 AQS 队列的 head 和 tail 节点——这两个字段都是 volatile 的,这意味着每次读取都会触发内存屏障,并可能引发缓存同步流量。在 10 万 TPS 的压测中,这个方法调用的开销能占到锁路径总耗时的 12%~18%,尤其是当 CPU 核心数多、NUMA 节点跨距大时,延迟抖动会明显上升。

更隐蔽的问题是:公平锁让“锁释放 → 下一个线程获取”之间的路径变长,中间夹着队列状态校验、节点插入、唤醒通知三步;而非公平锁在无竞争时只需单次 CAS 就能搞定。

实测吞吐差异在哪种场景最明显?

并非所有高并发场景都一样。非公平锁的优势在以下几种情况下尤为显著:

  • 临界区极短(如计数器自增、状态位翻转),线程持有锁的时间可以忽略不计;
  • 锁释放后立刻就有新请求涌入(例如事件循环、Netty 的 ChannelHandler);
  • CPU 核心数 ≥ 16,且线程数远超核心数,导致调度器频繁迁移线程。

反过来,如果临界区很长(如 IO 等待、复杂计算),或者业务明确需要按请求顺序处理(比如支付扣款必须严格 FIFO),那么公平锁的确定性反而更值得信赖。此时吞吐差距会缩小,甚至因避免了长尾延迟而让系统更稳定。

别忽略 unlock() 的隐含一致性成本

很多人只盯着 lock(),却忽略了 unlock() 同样受模式影响。非公平锁的 tryRelease() 只需修改 state 并清空 owner,而公平锁在唤醒下一个线程前,还得多做一次 isFirstInQueue() 判断(本质上是 hasQueuedPredecessors() 的逆操作),并确保唤醒的是真正的队首节点。

这个判断在高争用下可能失败重试——尤其是当多个线程同时释放锁、又同时触发唤醒逻辑时,JVM 层面无法原子化地完成“检查队首 + 唤醒”,只能靠循环 + CAS 来保证,这无疑进一步吃掉了 CPU 周期。

所以,ReentrantLock 默认选非公平,不是偷懒,而是把“多数时候更快”作为第一优先级。如果你确实需要公平,主动传 true 就行,但同时也要接受那部分可测量的吞吐折损和延迟抖动。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发
相关文章 更多
三星折叠屏新机保护膜曝光:三款机型尺寸差异显著
三星折叠屏新机保护膜曝光:三款机型尺寸差异显著

三星三款折叠屏新机保护膜曝光,外屏尺寸差异显著。Fold8Ultra外屏最高,Fold8采用更宽直板机比例,Flip8设计似上代。三款定位不同,外屏规格明确区分。

走出差异化AI原生之路 广发证券易淘金AI原生版 “AI透镜”正式亮相
走出差异化AI原生之路 广发证券易淘金AI原生版 “AI透镜”正式亮相

2026年,证券行业AI竞赛迈入深水区,头部券商竞争已从“有无大模型”转向 AI 与业务全链条深度融合。7月,广发证券正式发布新一代易淘金AI原生版——AI透镜,这不仅是App重大升级,更是公司推动AI从后台赋能走向前台触达的关键一步。与同业新建独立AI App的模式不同,广发证券选择在成熟易淘金A

2026八大桌面净化器横评:参数看着差不多,工位实测效果差异很夸张
2026八大桌面净化器横评:参数看着差不多,工位实测效果差异很夸张

八款桌面净化器横评显示,工位场景实测效果差异显著。核心指标为尼古丁去除率与净化技术。空气堡P1表现突出,实测尼古丁去除率达96%,采用催化分解技术避免反弹,年耗材成本仅66元。多数机型缺乏实测数据,净化效果存疑。

contextconfiglocation 在不同操作系统下的配置差异分析
contextconfiglocation 在不同操作系统下的配置差异分析

ContextConfigLocation是Spring框架中指定配置文件路径的关键参数。在Windows系统中,路径常包含盘符并使用反斜杠,但推荐使用正斜杠或classpath前缀以提升可移植性。Linux/Unix系统则使用正斜杠,且对路径大小写敏感。为实现跨平台部署,应优先采用classpath资源定位、使用相对路径或将配置外部化。配置不当易引发文件找

科技早报 | 小米上调手机出货目标;美团客服辟谣骑手因学历不同配送费有差异
科技早报 | 小米上调手机出货目标;美团客服辟谣骑手因学历不同配送费有差异

小米上调2026年手机出货目标至1.1亿部,增量来自低端机型。美团辟谣骑手配送费按学历分档,称平台不掌握学历信息。腾讯云计划大规模部署国产算力,并拟于2026年第四季度部署NPO超级节点。台积电拟自2027年起代工价格最高涨10%。

2026家用电饭煲怎么选,从加热技术看米饭口感差异在哪
2026家用电饭煲怎么选,从加热技术看米饭口感差异在哪

2026年选购电饭煲需关注真正不粘的0涂层技术和双驱交替IH加热,普通单盘IH温差大易糊底。九阳炫饭煲采用钛+316L不锈钢内胆与物理不粘技术,双驱IH加热配合远红外,实现米饭口感均匀,兼顾健康与实用。

如何对比华住会APP不同房型的价格差异
如何对比华住会APP不同房型的价格差异

想快速比价?别被系统默认的“爆款”忽悠了,关键第一步是——关闭智能推荐,开启价格排序,然后在酒店详情页里,用滑动对比、规则核查、草稿订单这三种方法,把房型差异挖得明明白白。再配合地图模式跨品牌比价,同时得留个心眼,警惕那些“限时特惠”背后可能藏着的隐藏条件。 举个例子,你想快速对比全季、汉庭、桔子水

premiere常规复制素材与快捷复制素材的区别是什么-premiere快捷复制素材和常规复制素材的差异在哪
premiere常规复制素材与快捷复制素材的区别是什么-premiere快捷复制素材和常规复制素材的差异在哪

在Premiere里复制素材,这事儿看起来简单,但实际操作起来,不同的人有不同的习惯,效率也天差地别。说到底,核心区别就在于:你是用常规方式慢慢来,还是用快捷键快速搞定。先说操作便捷性。常规方式,就是走菜单或者右键点击。比如在项目面板里选中素材,然后去“编辑”菜单里找“复制”,或者在素材上右键点一下

WriteLine与Write输出差异解析
WriteLine与Write输出差异解析

C#中WriteLine与Write的核心区别在于:WriteLine输出后自动换行,Write不换行,后续内容直接接在当前行末尾。通过示例验证,WriteLine使每个字符串后换行,Write则将内容挤在同一行。实际开发中WriteLine更常用,调试信息清晰,Write适用于连续输出同一行内容。

6s与6Sp核心差异解析
6s与6Sp核心差异解析

iPhone6s与6sPlus屏幕尺寸分别为4.7英寸和5.5英寸,分辨率1334×750与1920×1080,电池容量1715mAh与2750mAh。2015年推出的两款机型均搭载A9芯片与3DTouch,6s主打小巧便携,6sPlus侧重屏幕与续航。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,