Java 并发编程是进阶路上最难、也是含金量最高的一关。
下面我用"面试 + 实战 + 源码"三层结构,帮你把并发体系一次捋清楚。
一、并发的三大核心问题(先记住)
问题 说明 后果
可见性 一个线程改了变量,另一个线程看不见 读到旧值
原子性 操作被打断 数据错乱
有序性 指令重排序 逻辑异常
✅ JMM(Java 内存模型)就是为了解决这三个问题
二、线程基础(必须扎实)
1️⃣ 创建线程的 3 种方式
// 1. Thread
new Thread(() -> {}).start();
// 2. Runnable
new Thread(new MyRunnable()).start();
// 3. Callable + Future
FutureTask task = new FutureTask<>(() -> "ok");
new Thread(task).start();
✅ 推荐:Runnable / Callable(解耦)
2️⃣ 线程状态(面试必考)
NEW → RUNNABLE ↔ BLOCKED → WAITING → TIMED_WAITING → TERMINATED
状态 触发
BLOCKED synchronized
WAITING wait() / join()
TIMED_WAITING sleep(time)
三、锁机制(重中之重)
1️⃣ synchronized(JDK 内置)
✅ 特性:
• 可重入
• 非公平
• JVM 层面实现
✅ 锁升级(JDK 8+):
无锁 → 偏向锁 → 轻量级锁 → 重量级锁
📌 面试高频
synchronized 能保证可见性吗?
✅ 能(解锁前刷新主内存)
2️⃣ Lock 接口(JUC)
锁 特点
ReentrantLock 可重入、可中断
ReadWriteLock 读写分离
StampedLock 乐观读(更高性能)
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// do something
} finally {
lock.unlock();
}
✅ Lock vs synchronized
• Lock:灵活、可中断、公平锁
• synchronized:简单、JVM 优化好
四、线程池(并发的灵魂)
1️⃣ ThreadPoolExecutor 核心参数
new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
new ThreadPoolExecutor.AbortPolicy()
);
参数 作用
corePoolSize 常驻线程
maximumPoolSize 最大线程
workQueue 任务队列
RejectedExecutionHandler 拒绝策略
2️⃣ 执行流程(面试必背)
提交任务
↓
核心线程是否满?
↓
队列是否满?
↓
最大线程是否满?
↓
拒绝策略
✅ 拒绝策略
• AbortPolicy(抛异常)
• CallerRunsPolicy(调用者线程执行)
• DiscardPolicy(直接丢弃)
五、并发工具类(JUC 精华)
工具 用途
CountDownLatch 等待多线程完成
CyclicBarrier 线程相互等待
Semaphore 限流
Exchanger 线程间交换数据
✅ 高频场景
• 压测
• 批量任务汇总
• 限流控制
六、并发容器(替代 synchronized 集合)
容器 特点
ConcurrentHashMap 高并发 KV
CopyOnWriteArrayList 读多写少
BlockingQueue 生产者消费者
ConcurrentLinkedQueue 高性能无锁队列
✅ CopyOnWrite 缺点
• 写成本高
• 数据可能滞后
七、并发设计模式(拉开差距)
✅ Worker Thread
✅ Producer-Consumer
✅ Thread Local
✅ Future / Promise
八、常见并发陷阱(面试连环问)
❌ volatile 不能保证原子性
❌ i++ 不是线程安全的
❌ 线程池不要使用 Executors 创建
❌ ThreadLocal 用完要 remove()
九、并发学习路线(强烈推荐)
✅ 第一阶段:会用
• Thread / Runnable
• synchronized
• volatile
• ThreadPoolExecutor
✅ 第二阶段:懂原理
• JMM
• happens-before
• 锁升级
• AQS(AbstractQueuedSynchronizer)
✅ 第三阶段:能设计
• 高并发限流
• 异步编排
• 线程池调优
十、下一步我可以帮你做什么?