news 2026/4/17 22:35:17

【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock 1.1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock 1.1

【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock

二、详细区别分析
1. 实现层面
synchronized:
Java 关键字,由 JVM 底层实现(通过 monitorenter/monitorexit 字节码指令)。
锁信息记录在对象头的 Mark Word 中。
ReentrantLock:
基于 AbstractQueuedSynchronizer(AQS) 实现的显式锁。
通过 CAS(Compare-And-Swap)和队列管理线程竞争。

3. 公平性选择
synchronized:仅支持非公平锁(线程竞争时随机获取锁)。
ReentrantLock:
公平锁:按等待时间顺序获取锁,避免线程饥饿,但性能较低。
非公平锁:允许插队,性能更高。
4. 条件变量(Condition)
synchronized:通过 Object.wait()/notify() 实现等待/唤醒,只能有一个等待队列。
ReentrantLock:可创建多个 Condition 对象,实现精细化的线程等待/唤醒。
Condition condition = lock.newCondition();
condition.await(); // 类似 wait()
condition.signal(); // 类似 notify()
智能体编程
示例:生产者-消费者模型中,可为空队列和满队列分别设置 Condition
智能体编程
6. 性能差异
JDK 1.5 时 ReentrantLock 性能显著优于 synchronized。
JDK 1.6 后 JVM 对 synchronized 进行了大量优化(锁升级、自适应自旋等),两者性能差距缩小。
在高竞争场景下,ReentrantLock 仍可能表现更稳定。
三、适用场景
优先使用 synchronized 的情况
简单的同步场景,代码简洁性更重要。
不需要高级功能(如条件变量、中断、超时)。
资源竞争不激烈时,性能可接受。
优先使用 ReentrantLock 的情况
需要公平锁、可中断锁、超时锁等高级功能。
需要多个条件变量(如阻塞队列的实现)。
需要跨方法加锁/释放锁(如:在方法 A 加锁,在方法 B 释放)。
竞争激烈且性能要求高。

智能体编程

五、总结
synchronized 简单、安全、自动管理锁释放,适合大多数常规同步场景。
ReentrantLock 功能强大、灵活可控,适合复杂并发场景和高级需求。
从 JDK 1.6 开始,两者性能接近,选择时应更关注功能需求和代码可维护性。
在 JDK 后续版本中,synchronized 仍在持续优化(如锁消除、锁粗化等),而 ReentrantLock 提供了更细粒度的并发控制。
面试回答
首先,synchronized 是 Java 语言层面的关键字,是 JVM 原生支持的锁机制。它的使用非常简单,编译器会自动处理锁的获取和释放,所以基本不会因为忘记释放锁而导致死锁,易用性是它的最大优点。
而 ReentrantLock 是 JUC 包下的一个类,是 JDK 层面实现的锁。它需要开发者显式地调用 lock() 和 unlock() 方法,通常在 finally 块中释放锁,否则容易出问题。所以从使用门槛上说,synchronized 更低。

在功能上,ReentrantLock 比 synchronized 灵活和强大得多,主要有三点:

可中断获取锁:当线程尝试获取 ReentrantLock 时,如果长时间拿不到,可以响应中断,通过 lockInterruptibly() 方法放弃等待去做别的事情。而 synchronized 在等待锁时,线程会一直阻塞,无法被中断。
公平锁选项:ReentrantLock 可以在构造函数中指定是否是公平锁(先等待的线程先获得锁)。虽然公平锁性能有损耗,但能防止线程饥饿。synchronized 则是非公平的,谁抢到算谁的,性能通常更好。
条件变量(Condition):这是非常强大的一点。一个 ReentrantLock 可以创建多个 Condition 对象,用来实现更精细的线程等待/通知。比如,我们可以让一部分线程在条件A上等待,另一部分在条件B上等待,唤醒时也可以选择只唤醒等待条件A的线程。而 synchronized 只能配合 wait() 和 notify(),所有线程都在同一个条件队列上,唤醒是随机的(notify)或全部唤醒(notifyAll),不够精确。
在早期版本(JDK 1.5 之前),ReentrantLock 的性能比 synchronized 好很多。但后来 JVM 对 synchronized 进行了大幅优化,比如引入了偏向锁、轻量级锁、自旋锁、锁消除、锁粗化等。所以在高版本的 JDK(如 1.8 及以后)中,两者在性能上已经相差无几,synchronized 甚至在一些常见场景下更优,因为它有 JVM 的持续优化。

所以,我的选择原则通常是:

www.zhihu.com/zvideo/1994597713430460217
www.zhihu.com/zvideo/1994597713430460217/
www.zhihu.com/zvideo/1994597715309507198
www.zhihu.com/zvideo/1994597715309507198/
www.zhihu.com/zvideo/1994597716014157832
www.zhihu.com/zvideo/1994597716014157832/
www.zhihu.com/zvideo/1994597717318604696
www.zhihu.com/zvideo/1994597717318604696/
www.zhihu.com/zvideo/1994597717868040806
www.zhihu.com/zvideo/1994597717868040806/
www.zhihu.com/zvideo/1994597718828552474
www.zhihu.com/zvideo/1994597718828552474/
www.zhihu.com/zvideo/1994597719432520345
www.zhihu.com/zvideo/1994597719432520345/
www.zhihu.com/zvideo/1994597720346874003
www.zhihu.com/zvideo/1994597720346874003/
www.zhihu.com/zvideo/1994597721038922252
www.zhihu.com/zvideo/1994597721038922252/
www.zhihu.com/zvideo/1994597722255296116
www.zhihu.com/zvideo/1994597722255296116/
www.zhihu.com/zvideo/1994597735744157451
www.zhihu.com/zvideo/1994597735744157451/
www.zhihu.com/zvideo/1994597734636885823
www.zhihu.com/zvideo/1994597734636885823/
www.zhihu.com/zvideo/1994597737237345340
www.zhihu.com/zvideo/1994597737237345340/
www.zhihu.com/zvideo/1994597738365612895
www.zhihu.com/zvideo/1994597738365612895/
www.zhihu.com/zvideo/1994597740425007423
www.zhihu.com/zvideo/1994597740425007423/
www.zhihu.com/zvideo/1994597743386178164
www.zhihu.com/zvideo/1994597743386178164/
www.zhihu.com/zvideo/1994597747219789493
www.zhihu.com/zvideo/1994597747219789493/
www.zhihu.com/zvideo/1994597747228185385
www.zhihu.com/zvideo/1994597747228185385/
www.zhihu.com/zvideo/1994597748213817662
www.zhihu.com/zvideo/1994597748213817662/
www.zhihu.com/zvideo/1994597749451145848
www.zhihu.com/zvideo/1994597749451145848/
www.zhihu.com/zvideo/1994597758108194531
www.zhihu.com/zvideo/1994597758108194531/
www.zhihu.com/zvideo/1994597760104678942
www.zhihu.com/zvideo/1994597760104678942/
www.zhihu.com/zvideo/1994597761761449413
www.zhihu.com/zvideo/1994597761761449413/
www.zhihu.com/zvideo/1994597761203597492
www.zhihu.com/zvideo/1994597761203597492/
www.zhihu.com/zvideo/1994597767713149379
www.zhihu.com/zvideo/1994597767713149379/
www.zhihu.com/zvideo/1994597768833045497
www.zhihu.com/zvideo/1994597768833045497/
www.zhihu.com/zvideo/1994597769877423191
www.zhihu.com/zvideo/1994597769877423191/
www.zhihu.com/zvideo/1994597769894204068
www.zhihu.com/zvideo/1994597769894204068/
www.zhihu.com/zvideo/1994597770682721129
www.zhihu.com/zvideo/1994597770682721129/
www.zhihu.com/zvideo/1994597772880536221
www.zhihu.com/zvideo/1994597772880536221/
www.zhihu.com/zvideo/1994597776294704253
www.zhihu.com/zvideo/1994597776294704253/
www.zhihu.com/zvideo/1994597778987442638
www.zhihu.com/zvideo/1994597778987442638/
www.zhihu.com/zvideo/1994597782384813733
www.zhihu.com/zvideo/1994597782384813733/
www.zhihu.com/zvideo/1994597782862967656
www.zhihu.com/zvideo/1994597782862967656/
www.zhihu.com/zvideo/1994597785903837770
www.zhihu.com/zvideo/1994597785903837770/
www.zhihu.com/zvideo/1994597786713338919
www.zhihu.com/zvideo/1994597786713338919/
www.zhihu.com/zvideo/1994597789313828669
www.zhihu.com/zvideo/1994597789313828669/
www.zhihu.com/zvideo/1994597789926192041
www.zhihu.com/zvideo/1994597789926192041/
www.zhihu.com/zvideo/1994597793390671537
www.zhihu.com/zvideo/1994597793390671537/
www.zhihu.com/zvideo/1994597795915644932
www.zhihu.com/zvideo/1994597795915644932/
www.zhihu.com/zvideo/1994597796398007314
www.zhihu.com/zvideo/1994597796398007314/
www.zhihu.com/zvideo/1994597798339974403
www.zhihu.com/zvideo/1994597798339974403/
www.zhihu.com/zvideo/1994597799917015857
www.zhihu.com/zvideo/1994597799917015857/
www.zhihu.com/zvideo/1994597803356337592
www.zhihu.com/zvideo/1994597803356337592/
www.zhihu.com/zvideo/1994597802832048346
www.zhihu.com/zvideo/1994597802832048346/
www.zhihu.com/zvideo/1994597804375573445
www.zhihu.com/zvideo/1994597804375573445/
www.zhihu.com/zvideo/1994597806606927432
www.zhihu.com/zvideo/1994597806606927432/
www.zhihu.com/zvideo/1994597809882679275
www.zhihu.com/zvideo/1994597809882679275/
www.zhihu.com/zvideo/1994597809991726169
www.zhihu.com/zvideo/1994597809991726169/
www.zhihu.com/zvideo/1994597813682714024
www.zhihu.com/zvideo/1994597813682714024/
www.zhihu.com/zvideo/1994597814836155983
www.zhihu.com/zvideo/1994597814836155983/
www.zhihu.com/zvideo/1994597816232858745
www.zhihu.com/zvideo/1994597816232858745/
www.zhihu.com/zvideo/1994597817793131453
www.zhihu.com/zvideo/1994597817793131453/
www.zhihu.com/zvideo/1994597825145741460
www.zhihu.com/zvideo/1994597825145741460/
www.zhihu.com/zvideo/1994597825653256368
www.zhihu.com/zvideo/1994597825653256368/
www.zhihu.com/zvideo/1994597830300570717
www.zhihu.com/zvideo/1994597830300570717/
www.zhihu.com/zvideo/1994597833496601867
www.zhihu.com/zvideo/1994597833496601867/
www.zhihu.com/zvideo/1994597836084507617
www.zhihu.com/zvideo/1994597836084507617/
www.zhihu.com/zvideo/1994597839712575673
www.zhihu.com/zvideo/1994597839712575673/
www.zhihu.com/zvideo/1994597842304664260
www.zhihu.com/zvideo/1994597842304664260/
www.zhihu.com/zvideo/1994597842690536743
www.zhihu.com/zvideo/1994597842690536743/
www.zhihu.com/zvideo/1994597843311281374
www.zhihu.com/zvideo/1994597843311281374/
www.zhihu.com/zvideo/1994597845555229345
www.zhihu.com/zvideo/1994597845555229345/
www.zhihu.com/zvideo/1994597846880654445
www.zhihu.com/zvideo/1994597846880654445/
www.zhihu.com/zvideo/1994597847958566196
www.zhihu.com/zvideo/1994597847958566196/
www.zhihu.com/zvideo/1994597849426584009
www.zhihu.com/zvideo/1994597849426584009/
www.zhihu.com/zvideo/1994597850642940075
www.zhihu.com/zvideo/1994597850642940075/
www.zhihu.com/zvideo/1994597854015141705
www.zhihu.com/zvideo/1994597854015141705/
www.zhihu.com/zvideo/1994597856527528524
www.zhihu.com/zvideo/1994597856527528524/
www.zhihu.com/zvideo/1994597860558254751
www.zhihu.com/zvideo/1994597860558254751/
www.zhihu.com/zvideo/1994597863464907535
www.zhihu.com/zvideo/1994597863464907535/
www.zhihu.com/zvideo/1994597863133552822
www.zhihu.com/zvideo/1994597863133552822/
www.zhihu.com/zvideo/1994597868196100023
www.zhihu.com/zvideo/1994597868196100023/
www.zhihu.com/zvideo/1994597869236286054
www.zhihu.com/zvideo/1994597869236286054/
www.zhihu.com/zvideo/1994597873422197598
www.zhihu.com/zvideo/1994597873422197598/
www.zhihu.com/zvideo/1994597874399475676
www.zhihu.com/zvideo/1994597874399475676/
www.zhihu.com/zvideo/1994597874630165384
www.zhihu.com/zvideo/1994597874630165384/
www.zhihu.com/zvideo/1994597876240777582
www.zhihu.com/zvideo/1994597876240777582/
www.zhihu.com/zvideo/1994597880439275656
www.zhihu.com/zvideo/1994597880439275656/
www.zhihu.com/zvideo/1994597879436842220
www.zhihu.com/zvideo/1994597879436842220/
www.zhihu.com/zvideo/1994597881445900655
www.zhihu.com/zvideo/1994597881445900655/
www.zhihu.com/zvideo/1994597882666438740
www.zhihu.com/zvideo/1994597882666438740/
www.zhihu.com/zvideo/1994597886890100391
www.zhihu.com/zvideo/1994597886890100391/
www.zhihu.com/zvideo/1994597886848177080
www.zhihu.com/zvideo/1994597886848177080/
www.zhihu.com/zvideo/1994597891021488801
www.zhihu.com/zvideo/1994597891021488801/
www.zhihu.com/zvideo/1994597893236098421
www.zhihu.com/zvideo/1994597893236098421/
www.zhihu.com/zvideo/1994597895278699374
www.zhihu.com/zvideo/1994597895278699374/
www.zhihu.com/zvideo/1994597896188879715
www.zhihu.com/zvideo/1994597896188879715/
www.zhihu.com/zvideo/1994597903092711531
www.zhihu.com/zvideo/1994597903092711531/
www.zhihu.com/zvideo/1994597902031552680
www.zhihu.com/zvideo/1994597902031552680/
www.zhihu.com/zvideo/1994597908356556185
www.zhihu.com/zvideo/1994597908356556185/
www.zhihu.com/zvideo/1994597908767585917
www.zhihu.com/zvideo/1994597908767585917/
www.zhihu.com/zvideo/1994597909740663869
www.zhihu.com/zvideo/1994597909740663869/
www.zhihu.com/zvideo/1994597911170917480
www.zhihu.com/zvideo/1994597911170917480/
www.zhihu.com/zvideo/1994597912169166634
www.zhihu.com/zvideo/1994597912169166634/
www.zhihu.com/zvideo/1994597915537216408
www.zhihu.com/zvideo/1994597915537216408/
www.zhihu.com/zvideo/1994597916099241553
www.zhihu.com/zvideo/1994597916099241553/
www.zhihu.com/zvideo/1994597919236579470
www.zhihu.com/zvideo/1994597919236579470/
www.zhihu.com/zvideo/1994597927226716806
www.zhihu.com/zvideo/1994597927226716806/


优先考虑 synchronized:在满足需求的情况下,因为它简单、安全(自动释放),且性能不差。大部分标准的同步场景用它就够了。
需要高级功能时再用 ReentrantLock:比如我需要用到可中断、公平锁,或者需要复杂的条件等待机制(典型应用就是“生产者-消费者”模型),这时 ReentrantLock 是唯一的选择。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 22:32:15

避坑指南:LuatOS-Air脚本移植至LuatOS常见问题!

在实际开发中,许多开发者在尝试将LuatOS-Air脚本运行于标准LuatOS环境时遭遇报错或功能异常。这些问题多源于对底层驱动抽象层理解不足以及对系统任务模型的误用。本文将梳理典型错误场景,并提供可落地的修复方案,助力实现平滑迁移。 一、lua…

作者头像 李华
网站建设 2026/4/17 18:04:55

基于STM32的QSPI通信实战案例详解

STM32上的QSPI实战:从零搭建高速外部存储系统你有没有遇到过这样的困境?项目做到一半,内部Flash快爆了,GUI资源、音频文件、新功能代码全挤在一起,改一行代码都得精打细算;OTA升级时看着进度条一动不动&…

作者头像 李华
网站建设 2026/4/17 16:21:52

实验二 Python 控制结构与文件操作

实验二 Python 控制结构与文件操作一、实验基本原理运用 Anaconda 搭建的 Jupyter notebook 平台编写 Python 实例程序。二、实验目的1、理解 Python 的流程控制、文件操作的基本原理。2、通过实际案例编程,掌握 Python 的流程控制、文件的基本操作。三、具体要求1、…

作者头像 李华
网站建设 2026/4/17 16:00:30

AD23新增元件库资源盘点:与AD20的生态扩展对比

AD23元件库生态跃迁:从“建库”到“治库”的工程革命你有没有经历过这样的场景?深夜赶板,原理图画到一半,发现缺一个关键电源芯片的封装——查遍本地库、论坛、第三方网站,最终找到一个名字像模像样但引脚顺序反了的Pc…

作者头像 李华
网站建设 2026/4/9 19:23:37

最长递增子序列的个数

本文参考代码随想录 给定一个未排序的整数数组,找到最长递增子序列的个数。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 示例 2: 输入: [2,2,2,2,2] 输出: 5 解释: 最长递增子序列的长度是…

作者头像 李华
网站建设 2026/4/10 22:49:47

AUTOSAR中CAN控制器驱动开发实战案例

AUTOSAR中CAN控制器驱动开发实战:从硬件抽象到通信链贯通当汽车ECU遇上标准化通信:为什么我们需要AUTOSAR CAN驱动?现代汽车里藏着上百个电子控制单元(ECU),它们像一个个“智能器官”——发动机管理、刹车系…

作者头像 李华