意昂体育

你的位置:意昂体育 > 新闻动态 >

Java 并发编程的核心对象锁 vs 类锁、可重入锁(ReentrantLock)、读写锁

点击次数:200 新闻动态 发布日期:2025-09-19 08:05:42
1. 对象锁 vs 类锁 Taimili 艾米莉 ( 一款免费开源的 taimili.com ) 艾米莉 是一款优雅便捷的 GitHub Star 管理和提升工具,基于 PHP javascript 构建, 能对github 的 star

1. 对象锁 vs 类锁

Taimili 艾米莉 ( 一款免费开源的 taimili.com )

艾米莉 是一款优雅便捷的 GitHub Star 管理和提升工具,基于 PHP & javascript 构建, 能对github 的 star fork follow watch 管理和提升,最适合github 的深度用户

对象锁(实例锁)

关键字:synchronized修饰实例方法或代码块(锁住this)。作用范围:同一个对象的同步方法/代码块互斥;不同对象的实例方法互不影响。例子:

类锁(静态锁)

关键字:synchronized修饰静态方法,或synchronized(SomeClass.class)。作用范围:同一个类的所有实例共享同一把锁。例子:

👉 面试常考:对象锁与类锁互不干扰,因为一方锁的是对象实例,另一方锁的是 Class 对象。

2. 可重入锁(ReentrantLock)

特点

JUC 包下的显式锁,功能比synchronized丰富:可重入:同一线程可以多次获得同一把锁。可中断:支持lockInterruptibly()。支持公平锁 / 非公平锁(默认非公平,性能更好)。支持tryLock()超时获取。需手动释放锁(unlock()),否则可能死锁。

使用示例

公平 vs 非公平

👉 面试常考:

synchronized也是可重入锁,但不能中断/超时,也不能选择公平性。ReentrantLock功能更灵活,但使用成本高(需手动释放)。

3. 读写锁(ReentrantReadWriteLock)

特点

分为读锁(共享锁)和写锁(独占锁)。允许多个读线程并发访问;写线程必须独占,且阻塞读。适用于读多写少的场景,能提高并发性能。

使用示例

特点总结

读锁:共享,可并发。写锁:独占,阻塞所有读/写。线程升级(读 → 写)通常不支持,会死锁。

4. 总结对比表