第十六章 多线程与并发 —— 章节导读
本章定位:从零开始掌握 Java 多线程编程的核心知识体系。从线程的创建与生命周期到 JDK 8 的
LongAdder高性能原子累加器,覆盖锁机制(synchronized/volatile/ReentrantLock)、线程池(ThreadPoolExecutor)、并发工具类(CountDownLatch/CyclicBarrier/Semaphore)、原子类(CAS 原理)、ThreadLocal以及wait/notify生产者-消费者模式。
飞翔科技场景引入
周一早上,飞翔科技技术部的晨会上,CTO 大翔 站在白板前:
"咱们的工资计算系统每个月处理三千多员工的薪资,跑一次要四个小时。财务部李姐已经抱怨好几次了。小崔,你看看能不能用多线程优化一下?"
小崔挠了挠头:"多线程……我学过一点,但不是很深入。"
架构师白歌接过话:"不急,我们从头梳理。多线程是 Java 高级工程师的必修课,也是面试必考题。咱们把理论基础打扎实,然后用公司真实的业务场景来练手。"
测试组的李眉也凑过来:"上次生产环境出了个并发 Bug——两个线程同时扣库存导致超卖,损失了好几万。大翔,这次培训能不能把常见坑也讲透?"
大翔点头:"好,那就系统地把多线程与并发整个讲一遍。"
本章知识地图
各节内容概览
| 节次 | 文件 | 核心内容 | 难度 |
|---|---|---|---|
| 1 | 线程基础.md | 进程与线程区别、Thread/Runnable 创建方式、start() vs run()、线程生命周期、守护线程 | ★★☆ |
| 2 | synchronized.md | 同步代码块/方法、Monitor 机制、可重入性、锁升级(偏向锁→轻量级锁→重量级锁) | ★★★ |
| 3 | volatile.md | 可见性保证、Happens-Before、内存屏障、DCL 单例中的 volatile | ★★★ |
| 4 | Lock与ReentrantLock.md | Lock 接口、ReentrantLock、tryLock()、公平锁/非公平锁、Condition | ★★★☆ |
| 5 | 线程池.md | Executor 框架、ThreadPoolExecutor 参数、四种内置线程池、Callable & Future | ★★★☆ |
| 6 | 并发工具类.md | CountDownLatch、CyclicBarrier、Semaphore、Exchanger | ★★★ |
| 7 | 原子类.md | AtomicInteger、CAS 原理、ABA 问题、AtomicStampedReference、LongAdder | ★★★★ |
| 8 | ThreadLocal.md | 线程本地变量、ThreadLocalMap、弱引用、内存泄漏、remove() | ★★★ |
| 9 | wait与notify.md | wait/notify/notifyAll、虚假唤醒、生产者-消费者模式 | ★★★ |
学习路线建议
- 先打基础:阅读"线程基础",理解线程是什么、怎么创建、生命周期如何运转
- 攻克锁机制:依次学习
synchronized→volatile→ReentrantLock,这是并发编程的"三座大山" - 掌握线程池:实际开发中几乎不会手动
new Thread(),线程池是生产环境的标配 - 熟悉工具类:
CountDownLatch、Semaphore等能大幅简化并发协作代码 - 深入底层:原子类的 CAS 原理、
ThreadLocal内存泄漏问题,是面试的高频考点 - 线程协作:
wait/notify是经典的生产者-消费者实现方式,理解它有助于理解更高级的并发模型
前置知识
- Java 基础语法(面向对象、异常处理)
- 了解操作系统基本概念(CPU、内存、进程)
- 建议配合阅读:本章与第14章"集合框架"中的并发集合(
ConcurrentHashMap等)有交叉
场景数据
本章所有示例均使用飞翔科技的真实业务场景:
| 场景 | 涉及知识点 | 业务描述 |
|---|---|---|
| 工资计算系统 | 线程池、Future | 使用多线程并行计算 3000+ 员工的月度薪资 |
| 订单并发处理 | synchronized、ReentrantLock | 电商平台秒杀活动,保证库存扣减的原子性 |
| 定时任务调度 | ScheduledThreadPool | 每日凌晨自动生成财务报表 |
| 数据批量导入 | CountDownLatch、CyclicBarrier | Excel 导入 10 万条员工数据,分片并行处理 |
| 连接池限流 | Semaphore | 数据库连接池最多允许 20 个并发连接 |
| 用户会话管理 | ThreadLocal | 在 Web 请求处理链路中传递当前登录用户信息 |
JDK 版本说明
本章内容严格限定在 JDK 8。JDK 8 是 Java 发展史上最重要的 LTS 版本之一,其中:
ReentrantLock、Condition、原子类、线程池在 JDK 5 引入synchronized锁优化(偏向锁/轻量级锁)在 JDK 6 引入LongAdder在 JDK 8 引入CompletableFuture(JDK 8 新增,但超出本章范围,将在 JDK 8 新特性章节介绍)
小崔合上笔记本,深吸一口气:"好,从线程基础开始,一步步来!"