基于 JDK 1.8+ 的 synchronized 关键字深度解析。
一、基础部分
1.1 synchronized 概述
synchronized 是什么?
Java 内置的关键字,用于实现线程同步,本质是对象锁(Monitor Lock)。
提供的三大特性:
| 特性 | 说明 |
|---|---|
| 原子性 | 同步块内的操作要么全部执行,要么全部不执行 |
| 可见性 | 释放锁时,将工作内存刷回主内存;获取锁时,从主内存重新读取 |
| 有序性 | 同一时刻只有一个线程执行同步块,表现为串行 |
2025/12/20...大约 10 分钟
基于 JDK 1.8+ 的 synchronized 关键字深度解析。
synchronized 是什么?
Java 内置的关键字,用于实现线程同步,本质是对象锁(Monitor Lock)。
提供的三大特性:
| 特性 | 说明 |
|---|---|
| 原子性 | 同步块内的操作要么全部执行,要么全部不执行 |
| 可见性 | 释放锁时,将工作内存刷回主内存;获取锁时,从主内存重新读取 |
| 有序性 | 同一时刻只有一个线程执行同步块,表现为串行 |
基于 JDK 1.8 源码的读写锁核心原理分析。
假设你有一个缓存,100 个线程读,1 个线程偶尔写。如果用 ReentrantLock:
// 悲剧:读也要排队!
lock.lock();
try {
return cache.get(key); // 明明只是读,也要等锁
} finally {
lock.unlock();
}
待定,暂时先不看这个邮戳锁,后面再来细细研究!
基于 JDK 1.8 源码的 JUC 锁核心原理分析。
ReentrantLock 是独占模式(Exclusive)的可重入互斥锁,基于 AQS 实现,是 synchronized 关键字的替代方案。
// AQS 中
private volatile int state;