外观
并发编程
知识脉络
并发编程
├── 线程基础
│ ├── 线程生命周期与状态
│ ├── 创建方式(Thread/Runnable/Callable)
│ └── sleep/wait/yield/join
├── 锁机制
│ ├── synchronized(偏向锁/轻量级/重量级)
│ ├── ReentrantLock 与 AQS
│ ├── 读写锁 ReentrantReadWriteLock
│ └── 锁升级过程
├── 并发关键字
│ ├── volatile(可见性/有序性/非原子性)
│ ├── final 内存语义
│ └── CAS 与原子类
├── 线程池
│ ├── 核心参数与执行流程
│ ├── 拒绝策略
│ ├── 线程池大小设定
│ └── 常见线程池(Fixed/Cached/Scheduled)
├── 并发工具
│ ├── CountDownLatch/CyclicBarrier/Semaphore
│ ├── CompletableFuture
│ └── Fork/Join
├── 并发容器
│ ├── ConcurrentHashMap
│ ├── CopyOnWriteArrayList
│ └── BlockingQueue 系列
└── 并发问题
├── 死锁(条件/排查/避免)
├── ThreadLocal 原理与内存泄漏
└── 伪共享与缓存行知识点清单
| # | 题目 | 频率 | 难度 | 状态 |
|---|---|---|---|---|
| 1 | synchronized原理与锁升级 | 极高 | 困难 | todo |
| 2 | volatile原理 | 极高 | 进阶 | todo |
| 3 | CAS原理与ABA问题 | 极高 | 进阶 | todo |
| 4 | AQS原理 | 极高 | 困难 | todo |
| 5 | ReentrantLock与synchronized对比 | 极高 | 进阶 | todo |
| 6 | 线程池核心参数与执行流程 | 极高 | 进阶 | todo |
| 7 | 线程池大小如何设定 | 高 | 进阶 | todo |
| 8 | ThreadLocal原理与内存泄漏 | 极高 | 困难 | todo |
| 9 | ConcurrentHashMap原理 | 极高 | 困难 | todo |
| 10 | 死锁条件与排查 | 高 | 进阶 | todo |
| 11 | 线程生命周期与状态转换 | 高 | 基础 | todo |
| 12 | sleep与wait区别 | 高 | 基础 | todo |
| 13 | CountDownLatch与CyclicBarrier | 高 | 进阶 | todo |
| 14 | CompletableFuture用法 | 中 | 进阶 | todo |
| 15 | 读写锁原理 | 中 | 进阶 | todo |
| 16 | BlockingQueue实现原理 | 中 | 进阶 | todo |
| 17 | CopyOnWriteArrayList原理 | 中 | 进阶 | todo |
| 18 | Semaphore使用场景 | 中 | 基础 | todo |
| 19 | 线程间通信方式 | 高 | 基础 | todo |
| 20 | Fork-Join框架 | 中 | 进阶 | todo |
| 21 | Callable与Future | 中 | 基础 | todo |
| 22 | synchronized与Lock区别 | 高 | 基础 | todo |
| 23 | 偏向锁-轻量级锁-重量级锁 | 高 | 困难 | todo |
| 24 | 线程池拒绝策略 | 高 | 基础 | todo |
| 25 | 伪共享与缓存行 | 中 | 困难 | todo |
口诀速记
- 线程池参数: "核最存活队工拒(core/max/keepAlive/queue/factory/handler)"
- synchronized升级: "无偏轻重,单竞短长"
- 死锁四条件: "互占不循(互斥/占有等待/不可抢占/循环等待)"
- volatile: "可见有序非原子"
跨域关联
- CAS → 原子类 → Unsafe类
- 线程池 → Spring-@Async(Spring 生态)
- volatile/JMM → JMM与happens-before(JVM)
- ThreadLocal → OOM类型与排查(JVM)