Synchronized与Lock的区别及底层实现

`Synchronized` 和 `Lock` 是 Java 中常用的两种线程同步机制,它们在用法和底层实现上有一些显著的区别。下面是它们的详细对比和底层实现解释:

### Synchronized
`Synchronized` 是 Java 内置的一种同步机制,使用关键字 `synchronized` 可以在方法或者代码块上进行同步。

#### 用法
- **方法同步**:在方法声明上使用 `synchronized` 关键字。
```java
public synchronized void synchronizedMethod() {
// critical section
}
```
- **代码块同步**:在代码块上使用 `synchronized` 关键字,指定一个对象作为锁。
```java
public void method() {
synchronized (this) {
// critical section
}
}
```

#### 底层实现
- **JVM 实现**:`Synchronized` 是由 JVM 实现的内置锁。每个对象都有一个监视器锁(Monitor),`synchronized` 使用这个监视器来实现同步。
- **字节码支持**:`synchronized` 代码块在编译后,会生成字节码指令 `monitorenter` 和 `monitorexit`。
- **重量级锁**:在早期的 JVM 实现中,`synchronized` 被称为重量级锁,因为它依赖于操作系统的互斥量(mutex),性能较低。

### Lock
`Lock` 是 Java 5 引入的 `java.util.concurrent.locks` 包中的接口,它提供了比 `synchronized` 更灵活的锁机制。

#### 用法
- **创建锁**:使用 `ReentrantLock` 类来创建锁对象。
```java
private final Lock lock = new ReentrantLock();

public void method() {
lock.lock();
try {
// critical section
} finally {
lock.unlock();
}
}
```

#### 底层实现
- **Java 实现**:`Lock` 是通过 Java 类库实现的,主要依赖于 `AbstractQueuedSynchronizer`(AQS)。
- **AQS 机制**:AQS 是一个框架,用于构建锁和同步器。它通过 FIFO 队列管理锁的获取和释放,支持可重入锁、公平锁、非公平锁等多种锁策略。
- **轻量级锁**:相比于 `synchronized`,`Lock` 提供了更高的性能和灵活性,特别是在高并发环境下。

### 主要区别
1. **灵活性**:
- `Lock` 提供了更多的功能,如可重入锁、公平锁、非公平锁、可中断锁、超时锁等。
- `synchronized` 是内置的,使用简单,但功能有限。

2. **性能**:
- `Lock` 在高并发环境下性能更高,因为它通过 AQS 实现了更高效的锁管理。
- `synchronized` 在低并发环境下性能可以接受,但在高并发环境下可能会成为瓶颈。

3. **可中断和超时**:
- `Lock` 支持锁的中断和超时获取。
- `synchronized` 不支持中断和超时获取。

4. **锁的获取和释放**:
- `Lock` 需要显式地获取和释放锁(通过 `lock()` 和 `unlock()` 方法)。
- `synchronized` 是隐式的,由 JVM 自动管理锁的获取和释放。

### 适用场景
- **简单同步**:如果同步需求简单,可以使用 `synchronized`,因为它使用简单且易于维护。
- **复杂同步**:如果需要更高的性能或更复杂的同步策略,应使用 `Lock`,如需要公平锁、可中断锁等功能。

通过理解 `Synchronized` 和 `Lock` 的区别及其底层实现,可以更好地选择适合的同步机制,提高并发程序的性能和可维护性。

posted @   LiRang2022  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示