一、基础分类(按实现方式)
这是最核心的分类维度,直接决定锁的使用方式和核心能力。
1. 内置锁(synchronized)- 隐式锁
核心定义
Java 关键字,JVM 层面实现的隐式锁(无需手动释放),是最基础、使用最广泛的锁。JDK1.6 后引入「锁升级」机制,性能大幅提升。
核心特点
- 可重入、默认非公平锁;
- 自动加锁 / 解锁(方法 / 代码块执行完自动释放,无需手动处理);
- 底层依赖对象头的
Mark Word+ 监视器锁(ObjectMonitor); - 支持锁升级(偏向锁→轻量级锁→重量级锁),适配不同并发场景。
适用场景
- 简单互斥场景(如方法 / 代码块的线程安全);
- 并发度不高、代码简洁性优先的场景;
- 不需要灵活特性(如可中断、超时获取锁)的场景;
- 绝大多数普通业务场景(JVM 优化后性能接近显式锁)。
代码示例
public class SynchronizedDemo {
// 1. 实例方法锁(对象锁):锁当前实例对象
public synchronized void objectLock() {
System.out.println(Thread.currentThread().getName() + "获取对象锁");
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
// 2. 静态方法锁(类锁):锁当前类的 Class 对象
public static synchronized void classLock() {
System.out.println(Thread.currentThread().getName() + "获取类锁");
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
// 3. 代码块锁:自定义锁对象(灵活度最高)
private final Object lockObj = ();
{
(lockObj) {
System.out.println(Thread.currentThread().getName() + );
{
Thread.sleep();
} (InterruptedException e) {}
}
}
{
();
(demo::objectLock, ).start();
(demo::objectLock, ).start();
}
}


