Skip to content

Java 并发知识体系总览


第1阶段 线程基础 → 线程创建、状态转换、生命周期
第2阶段 同步机制 → synchronized、volatile、锁机制
第3阶段 并发工具 → CountDownLatch、CyclicBarrier、Semaphore
第4阶段 并发容器 → ConcurrentHashMap、BlockingQueue
第5阶段 线程池 → ThreadPoolExecutor、ForkJoinPool
第6阶段 内存模型 → JMM、happens-before、指令重排
Java 并发编程
┌───────────┬───────────┼───────────┬───────────┐
▼ ▼ ▼ ▼ ▼
线程基础 同步机制 并发工具 并发容器 线程池
│ │ │ │ │
• Thread • synchronized • CountDownLatc • ConcurrentHashMap • ThreadPoolExecutor
• 状态机 • volatile • CyclicBarrier • BlockingQueue • ForkJoinPool
• 中断 • ReentrantLock • Semaphore • Atomic • 任务调度
• 虚拟线程 • AQS • CompletableFuture • CopyOnWrite • 拒绝策略
专题考察频率难度核心能力
synchronized 原理★★★★★锁升级机制
AQS 队列★★★★★队列管理
线程池参数★★★★★参数调优
ConcurrentHashMap★★★★★并发安全
volatile & JMM★★★★☆内存语义
虚拟线程★★★☆☆新技术掌握

🧵 线程模型与生命周期

Java 线程与 OS 线程的映射;线程状态机与转换条件;Thread vs Runnable vs Callable;虚拟线程(Project Loom)。

🔒 锁机制与 AQS

synchronized 的偏向锁/轻量级锁/重量级锁升级;ReentrantLock vs synchronized;AQS 同步队列原理;读写锁与 StampedLock。

🏊 线程池

ThreadPoolExecutor 七大参数;核心线程/最大线程/队列的协作机制;拒绝策略;ForkJoinPool 与工作窃取;线程池监控与调优。

📦 并发容器

ConcurrentHashMap 分段锁→CAS+synchronized 演进;CopyOnWriteArrayList 适用场景;BlockingQueue 家族;Atomic 原子类与 CAS 原理。

🧠 Java 内存模型(JMM)

主内存与工作内存;happens-before 规则;volatile 的内存语义;double-checked locking 的正确姿势;指令重排与内存屏障。


专题初级中级高级代表问题
线程模型⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐线程有哪些状态?BLOCKED 和 WAITING 的区别?
锁机制/AQS⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐synchronized 的锁升级过程?AQS 是如何实现公平锁的?
线程池⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐核心线程数怎么设置?任务队列满了会发生什么?
并发容器⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ConcurrentHashMap 如何实现并发安全?JDK7 vs JDK8?
JMM⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐volatile 能保证原子性吗?happens-before 有哪些规则?

Java 并发编程体系
├── 线程基础
│ ├── Thread / Runnable / Callable / Future
│ ├── 线程状态:NEW → RUNNABLE → BLOCKED/WAITING/TIMED_WAITING → TERMINATED
│ └── 线程中断:interrupt() / isInterrupted() / interrupted()
├── 同步机制
│ ├── synchronized(内置锁,JVM 层面)
│ │ └── 锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁
│ ├── volatile(可见性 + 禁止重排)
│ └── java.util.concurrent.locks(JDK 层面)
│ ├── ReentrantLock(可重入、可中断、可超时、可公平)
│ ├── ReentrantReadWriteLock(读写分离)
│ ├── StampedLock(乐观读,Java 8+)
│ └── AQS(AbstractQueuedSynchronizer)—— 所有锁的基础框架
├── 并发工具
│ ├── CountDownLatch / CyclicBarrier / Semaphore / Phaser / Exchanger
│ └── CompletableFuture(异步编排,Java 8+)
├── 并发容器
│ ├── ConcurrentHashMap / ConcurrentSkipListMap
│ ├── CopyOnWriteArrayList / CopyOnWriteArraySet
│ ├── BlockingQueue:ArrayBQ / LinkedBQ / PriorityBQ / DelayQueue / SynchronousQueue
│ └── Atomic 原子类:AtomicInteger / AtomicReference / LongAdder
└── 线程池
├── ThreadPoolExecutor(核心实现)
├── ScheduledThreadPoolExecutor(定时任务)
├── ForkJoinPool(分治 + 工作窃取)
└── Executors 工厂方法(慎用!可能隐藏参数风险)

理解并发问题必须先搞清楚三个根本原因:

可见性问题
原因:CPU 缓存导致各线程看到的内存值不一致
解决:volatile、synchronized、final
原子性问题
原因:多步操作在执行中途被其他线程打断
解决:synchronized、ReentrantLock、CAS/Atomic 类
有序性问题
原因:编译器/CPU 指令重排,改变了代码执行顺序
解决:volatile(内存屏障)、happens-before 规则

版本重要新增
Java 5java.util.concurrent 包(J.U.C)正式引入;Atomic 类;线程池框架
Java 6synchronized 锁优化(偏向锁、轻量级锁、锁消除、锁粗化)
Java 7ForkJoinPool 引入;TransferQueue
Java 8StampedLock;LongAdder;CompletableFuture;并行流
Java 9VarHandle(替代部分 Unsafe 操作)
Java 21虚拟线程(Virtual Threads)正式 GA,每百万虚拟线程只占少量 OS 线程

第1天 线程模型与生命周期 → 基础扎实,状态转换图要能手画
第2天 synchronized 原理 → 锁升级是中高级必问,理解 Mark Word
第3天 AQS 与 ReentrantLock → 理解 CLH 队列和 state 变量语义
第4天 线程池原理与调优 → 参数含义和任务处理流程必须脱口而出
第5天 JMM 与 volatile → happens-before 要能举例,DCL 写法要正确