
JUC-00_大纲
JUC 并发编程 — 复习大纲
基于 7 篇笔记整理,覆盖 JUC 核心知识点。每个章节标注了对应笔记文件,方便跳转回顾。
01 线程基础与关键字
对应篇章:01线程拓展和关键字总结.md
-
线程通信基础
-
上下文切换与程序计数器
-
临界区概念
-
interrupt 中断机制与复位
-
wait / notify / notifyAll 等待-通知模式
-
更优雅的停止线程(boolean + isInterrupt)
-
-
volatile 关键字
-
可见性保证
-
禁止重排序优化
-
内存屏障原理(StoreStore / StoreLoad / LoadLoad / LoadStore)
-
六大使用场景(状态标志、一次性发布、volatile bean、双重检查单例等)
-
-
synchronized 关键字
-
锁对象 / 锁方法 / 锁代码块 / 静态锁
-
Monitor(管程)机制:monitorenter / monitorexit / 计数器
-
可重入锁原理
-
Java 对象头 Mark Word 结构
-
Monitor 结构:owner / entry list / wait set
-
-
锁升级(1.6+)
-
升级路径:无锁 → 偏向锁 → 轻量锁 → 重量锁(单向不可逆)
-
锁粗化与锁消除
-
自旋锁与自适应自旋
-
偏向锁的引入背景、原理与撤销(全局安全点)
-
轻量锁的 CAS 加锁 / 撤销
-
重量锁的 Monitor 阻塞
-
-
final 关键字
-
加类 / 加变量 / 加方法的语义
-
编译期常量 vs 运行时常量
-
基本类型与引用类型的重排序约束
-
内存屏障保证 final 语义
-
02 JUC 并发类全景概览
对应篇章:02并发类汇总概述.md
-
Lock 框架
-
Condition 接口(wait-notify 的增强替代)
-
Lock / ReadWriteLock 接口
-
AQS 核心抽象类(模板方法模式,state + FIFO 队列)
-
LockSupport、ReentrantLock、ReentrantReadWriteLock、StampedLock
-
-
同步工具类
-
CountDownLatch(倒计时,一次性)
-
CyclicBarrier(循环栅栏,可复用)
-
Phaser(动态阶段屏障)
-
Semaphore(信号量限流)
-
Exchanger(线程间数据交换)
-
-
并发集合
-
Queue 系列:ArrayBlockingQueue / LinkedBlockingQueue / LinkedBlockingDeque / ConcurrentLinkedQueue / ConcurrentLinkedDeque / DelayQueue / PriorityBlockingQueue / SynchronousQueue / LinkedTransferQueue
-
List:CopyOnWriteArrayList
-
Set:CopyOnWriteArraySet / ConcurrentSkipListSet
-
Map:ConcurrentHashMap / ConcurrentSkipListMap
-
-
Atomic 原子类
- 基础类型 / 数组 / 引用 / FieldUpdater 四组分类
-
线程池体系
-
Executor → ExecutorService → ScheduledExecutorService 接口层级
-
AbstractExecutorService / FutureTask / ThreadPoolExecutor / ScheduledThreadPoolExecutor / ForkJoinPool
-
Executors 工具类
-
03 CAS、Unsafe 与原子类
对应篇章:03CAS.Unsafe和原子类.md
-
线程安全实现方法
-
阻塞同步(synchronized / ReentrantLock)
-
非阻塞同步(CAS / AtomicXXX)
-
无同步方案(栈封闭 / ThreadLocal / 可重入代码)
-
-
CAS 机制
-
CompareAndSwap 原理:期望值比较 + 原子替换
-
乐观锁 vs 悲观锁
-
ABA 问题与 AtomicStampedReference 版本号解决方案
-
自旋开销问题
-
单变量原子性限制与 AtomicReference
-
-
Unsafe 类
-
核心方法:compareAndSwapObject / Int / Long
-
底层调用 Atomic::cmpxchg,Windows 下 lock 前缀总线锁
-
扩展功能:堆外内存操作、线程调度、Class 操作、对象操作、数组操作、内存屏障、系统信息
-
-
原子类详解
-
AtomicInteger 常用 API 与底层 CAS + volatile 实现
-
四组分类详解:基本类型 / 数组类型 / 引用类型 / 原子更新类
-
AtomicStampedReference 内部 Pair 对象解决 ABA
-
AtomicMarkableReference 标记位方案
-
04 LockSupport 与线程调度
对应篇章:04LockSupport和线程调度.md
-
LockSupport 核心
-
park / unpark 机制(替代 wait-notify)
-
底层 Unsafe.park / unpark 方法
-
blocker 机制与 setBlocker
-
parkNanos / parkUntil 超时版本
-
-
wait-notify vs park-unpark 对比
-
wait-notify 代码示例
-
park-unpark 代码示例
-
关键区别:锁释放 / 异常处理 / 顺序要求
-
-
四大阻塞方法对比
-
Thread.sleep():不释放锁,需捕获异常,只能自己醒来
-
Object.wait():释放锁,需上锁使用,notify 唤醒
-
Condition.await():释放锁,基于 park 实现
-
LockSupport.park():不释放锁,无需上锁,unpark 可提前调用
-
05 AQS 与 ReentrantLock
对应篇章:05AQS和ReentrantLock.md
-
AQS(AbstractQueuedSynchronizer)
-
结构:volatile state + Node 双向队列(同步队列)+ ConditionObject(条件队列)
-
模板方法:tryAcquire / tryRelease / tryAcquireShared / tryReleaseShared / isHeldExclusively
-
独占锁获取释放流程(CAS 入队 → 自旋判断前驱 → park 阻塞 → release 唤醒)
-
共享锁获取释放流程(state > 0 即可获取,释放时唤醒后续节点)
-
ConditionObject:await 入条件队列 → signal 移入同步队列
-
总结:AQS = CAS 管程,Unsafe 提供原子操作,LockSupport 提供线程调度
-
-
ReentrantLock
-
FairSync vs NonFairSync(公平锁先判断队列,非公平锁直接 CAS 抢占)
-
可重入实现(当前线程 == owner 时 state + 1)
-
释放资源(state - 1,owner 置 null,unparkSuccessor)
-
-
ReentrantReadWriteLock
-
读写互斥,state 高 16 位读锁 / 低 16 位写锁
-
锁降级(写锁中获取读锁再释放写锁),不支持锁升级
-
适用场景:读多写少
-
06 JUC 集合与工具类
对应篇章:06juc集合工具类.md
-
ConcurrentHashMap
-
JDK 1.7:Segment 分段锁(ReentrantLock),默认 16 段
-
JDK 1.8:CAS + volatile + synchronized,数组 < 64 不转红黑树,负载因子 0.75 扩容
-
-
CopyOnWriteArrayList
-
写时复制 + ReentrantLock
-
fail-safe 迭代器(快照,不抛 ConcurrentModificationException)
-
缺点:内存消耗大 / 最终一致性 / 数据量大易 OOM
-
-
并发队列
-
ConcurrentLinkedQueue:无锁 CAS,hops 延迟更新
-
BlockingQueue 四类操作方法(抛异常 / 返回值 / 阻塞 / 超时)
-
ArrayBlockingQueue:有界,数组固定大小
-
LinkedBlockingQueue:无界(默认 Integer.MAX_VALUE),注意内存泄漏
-
DelayQueue:Delayed 接口,延迟获取
-
PriorityBlockingQueue:Comparable 排序,无界
-
SynchronousQueue:容量为 0 的同步点
-
-
同步工具类详解
-
CountDownLatch:基于 AQS 共享锁,await 阻塞主线程,countdown 计数归零唤醒,一次性
-
CyclicBarrier:基于 ReentrantLock + Condition(AQS 等待队列),屏障回调,可复用,不影响主线程
-
Semaphore:信号量限流,基于 AQS(FairSync / NonFairSync),acquire/release 控制
-
Exchanger:双向数据交换,线程间通信
-
Phaser:多阶段屏障,动态注册注销,增强版 Latch + Barrier
-
-
ThreadLocal
-
线程本地缓存,ThreadLocalMap(Thread 持有),线程隔离
-
弱引用 Entry,配合线程池需手动 remove 防内存泄漏
-
常用场景:线程池、Session 等线程唯一数据
-
07 线程池
对应篇章:07线程池.md
-
FutureTask
-
实现 RunnableFuture(Runnable + Future)
-
state 状态机:new → completing(normal / exceptional)→ canceled / interrupted
-
awaitDone 自旋 + CAS + volatile
-
三种使用方式:Executors + Future / Executors + FutureTask / Thread + FutureTask
-
-
ThreadPoolExecutor 核心
-
七大参数:corePoolSize / maxPoolSize / keepAliveTime / timeUnit / BlockingQueue / ThreadFactory / RejectHandler
-
四种拒绝策略:AbortPolicy / CallerRunsPolicy / DiscardOldestPolicy / DiscardPolicy
-
执行原理(三步判断):核心线程 → 阻塞队列 → 非核心线程 → 拒绝策略
-
ctl 状态:高 3 位运行状态 + 低 29 位线程数(AtomicInteger)
-
-
Executors 工厂方法
-
newFixedThreadPool:固定线程数,无界队列,不释放空闲线程
-
newSingleThreadPool:单线程顺序执行,无界队列
-
newCachedThreadPool:0 初始 / Integer.MAX 最大,60s 存活,SynchronousQueue
-
不推荐原因:无界队列 / 最大线程数过大 → OOM
-
-
任务执行流程
-
execute(Runnable) vs submit(Runnable / Callable,返回 Future)
-
execute → addWorker → runWorker(getTask 从队列获取任务)
-
Worker 内部类:ReentrantLock 保证创建安全,AQS state = 0 标识可中断
-
-
线程池关闭
-
shutdown:设 SHUTDOWN 状态,中断空闲线程,等待执行中任务完成
-
shutdownNow:设 STOP 状态,停止所有线程
-
-
线程池调优建议
-
CPU 密集型:N_cpu + 1 线程
-
IO 密集型:N_cpu * 2 线程
-
考虑因素:任务优先级 / 执行时长 / 任务性质 / 依赖关系
-
推荐自定义线程池 + 有界阻塞队列
-
-
ScheduledThreadPool
-
继承 ThreadPoolExecutor + 实现 Delayed 接口
-
支持定时 / 周期任务,Spring @Scheduled 底层
-
知识脉络总结
线程基础与关键字(01)
├── volatile:可见性 + 禁重排 + 内存屏障
├── synchronized:Monitor + 锁升级(偏向→轻量→重量)
└── final:禁重排 + 内存屏障
线程安全三方案(03)
├── 阻塞同步:synchronized / ReentrantLock
├── 非阻塞同步:CAS + Atomic
└── 无同步方案:ThreadLocal
核心基础设施(03-04)
├── Unsafe:CAS 原子操作 + 底层内存管理
└── LockSupport:park / unpark 线程调度
同步框架(05)
├── AQS:state + 同步队列 + 条件队列 + 模板方法
├── ReentrantLock:公平 / 非公平,可重入
└── ReentrantReadWriteLock:读写分离,锁降级
并发容器(06)
├── ConcurrentHashMap:1.7 分段锁 / 1.8 CAS+synchronized
├── CopyOnWriteArrayList:写时复制,读多写少
└── BlockingQueue 系列:生产者消费者模型
同步工具(06)
├── CountDownLatch / CyclicBarrier / Phaser
├── Semaphore:限流
└── Exchanger:数据交换
线程池(07)
├── ThreadPoolExecutor:七大参数 + 执行原理
├── FutureTask:异步结果获取
└── ScheduledThreadPool:定时任务