当前位置: 首页 > news >正文

《Java 100 天进阶之路》并发编程与JUC通关总结:从线程基础到并发容器,一套吃透Java高并发全链路(2026版)

🎯 并发编程与JUC通关总结:从线程基础到并发容器,一套吃透Java高并发全链路(2026精版)

📌系列导航:《Java 100 天进阶之路》完整目录

恭喜你!你已经完成了《Java 100 天进阶之路》并发编程与JUC详解阶段(第51~60篇)的全部学习。

这是进阶篇中面试权重最高、区分度最大的阶段之一——从线程生命周期到锁升级机制,从 JMM 内存模型到 AQS 底层原理,从线程池调优到死锁排查,从 CompletableFuture 异步编排到 ThreadLocal 内存泄漏治理,10 篇文章,覆盖了 Java 并发编程 90% 以上的面试考点。从“线程是什么”到“高并发系统设计”,你完成了并发编程的完整进阶。

本文是这一阶段的通关总结,用一张学习路线图 + 十张速查表 + 面试题汇总 + 避坑清单,帮你把 10 篇精华全部串联起来。建议收藏,随时复习。


📌 本阶段完整学习路线图

学习路径建议

  1. 零基础/系统学习:按 51→52→53→54→55→56→57→58→59→60 顺序学习,层层递进
  2. 有基础/面试突击:优先看 52(锁升级)+ 54(AQS)+ 55(线程池)+ 60(压轴题)
  3. 架构师/调优方向:重点关注 53(JMM/volatile)+ 56(死锁排查)+ 58(LongAdder/伪共享)+ 59(TTL)

📚 分篇核心知识点速查表

第51篇:线程生命周期与创建方式

📖 查看完整文章

核心概念一句话总结高频面试提问
6种线程状态NEW → RUNNABLE → BLOCKED/WAITING/TIMED_WAITING → TERMINATEDJava线程有几种状态?
状态转换start()sleep()wait()notify()join()触发转换状态之间如何转换?
4种创建方式Thread、Runnable、Callable、线程池创建线程有几种方式?
sleep vs waitsleep 不释放锁,wait 释放锁sleep() 和 wait() 的区别?
start vs runstart 启动新线程,run 是普通方法调用start() 和 run() 的区别?
虚拟线程JDK 21+ 轻量级线程,M:N 调度虚拟线程和平台线程的区别?
虚拟线程适用场景高并发 I/O 密集型,不适合 CPU 密集型虚拟线程什么时候用?

👉 阅读完整文章

第52篇:synchronized 深度解析

📖 查看完整文章

核心概念一句话总结高频面试提问
三种使用方式实例方法(锁this)、静态方法(锁Class)、代码块(自定义锁对象)synchronized 的三种用法?
Mark Word锁状态存储在对象头中,64位JVM占8字节synchronized 的锁存在哪里?
锁升级全流程无锁 → 偏向锁 → 轻量级锁 → 重量级锁(单向升级)synchronized 锁升级过程?
偏向锁单线程场景,Mark Word存线程ID,无CAS开销偏向锁解决什么问题?
轻量级锁轻度竞争,自旋等待,Lock Record轻量级锁怎么工作?
重量级锁重度竞争,OS互斥量,ObjectMonitor重量级锁什么时候触发?
JVM优化自适应自旋、锁消除、锁粗化JVM 对 synchronized 做了哪些优化?
虚拟线程 Pinningsynchronized 导致虚拟线程固定在载体线程虚拟线程中为什么慎用 synchronized?

👉 阅读完整文章

第53篇:volatile 与 JMM

📖 查看完整文章

核心概念一句话总结高频面试提问
JMM vs JVM内存结构JMM管“怎么看见”,JVM内存结构管“存哪里”JMM 和 JVM 内存结构的区别?
三大特性原子性(synchronized/锁)、可见性(volatile)、有序性(内存屏障)JMM 解决什么问题?
volatile 保证✅ 可见性 ✅ 禁止重排 ❌ 不保证原子性volatile 能保证原子性吗?
内存屏障StoreStore、StoreLoad、LoadLoad、LoadStorevolatile 如何禁止指令重排?
Happens-Beforevolatile写 → volatile读volatile 的 Happens-Before 规则?
DCL单例必须加 volatile 防止半初始化对象暴露DCL 单例为什么必须加 volatile?

👉 阅读完整文章

第54篇:AQS 抽象队列同步器

📖 查看完整文章

核心概念一句话总结高频面试提问
AQS 定义JUC 并发体系的底层基石AQS 是什么?
核心三要素volatile int state + CLH双向队列 + 模板方法模式AQS 的核心思想?
独占模式同一时刻只有一个线程能获取(ReentrantLock)AQS 的独占模式?
共享模式同一时刻多个线程可同时获取(Semaphore/CountDownLatch)AQS 的共享模式?
CLH队列FIFO双向链表,存储等待线程,每个线程封装为NodeCLH 队列是什么?
可重入性实现state 计数,当前线程是持有者时 state++ReentrantLock 如何实现可重入?

👉 阅读完整文章

第55篇:线程池 ThreadPoolExecutor

📖 查看完整文章

核心概念一句话总结高频面试提问
七大参数corePoolSize、maxPoolSize、keepAliveTime、unit、workQueue、threadFactory、handlerThreadPoolExecutor 七大参数?
四步执行流程核心线程 → 任务队列 → 非核心线程 → 拒绝策略任务提交后的执行流程?
四种拒绝策略AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy线程池的拒绝策略有哪些?
Executors陷阱无界队列→OOM,无限线程→资源耗尽为什么禁止使用 Executors?
线程数公式CPU密集型:CPU核数+1;IO密集型:CPU核数×2corePoolSize 如何设置?
生命周期shutdown(优雅关闭)、shutdownNow(立即关闭)shutdown 和 shutdownNow 的区别?

👉 阅读完整文章

第56篇:死锁与排查工具

📖 查看完整文章

核心概念一句话总结高频面试提问
四大必要条件互斥 + 持有并等待 + 不可剥夺 + 循环等待死锁的四个必要条件?
jstack 排查jps -l找 PID →jstack -l <PID>→ 搜索 “deadlock”如何排查 Java 死锁?
预防策略统一锁顺序、tryLock 超时、减少锁粒度如何预防死锁?
死锁 vs 活锁死锁永久阻塞,活锁不断重试失败死锁和活锁的区别?

👉 阅读完整文章

第57篇:CompletableFuture 异步编程

📖 查看完整文章

核心概念一句话总结高频面试提问
Future 四大痛点阻塞等待、无法链式、无法组合、异常难处理CompletableFuture 比 Future 好在哪?
任务创建supplyAsync(有返回值)、runAsync(无返回值)如何创建异步任务?
thenApply vs thenComposethenApply 同步转换,thenCompose 串联异步任务thenApply 和 thenCompose 的区别?
任务组合thenCombine(并行合并)、allOf(等全部)、anyOf(等任意)如何组合多个异步任务?
异常处理exceptionally(兜底)、handle(都处理)、whenComplete(收尾)异常处理三件套的区别?
线程池业务异步不用 commonPool,自建线程池区分 CPU/IOCompletableFuture 默认用什么线程池?

👉 阅读完整文章

第58篇:原子类与 CAS

📖 查看完整文章

核心概念一句话总结高频面试提问
CAS 三要素内存位置 V、预期值 A、新值 BCAS 的三要素是什么?
CAS 底层CPU 原子指令(x86: lock cmpxchg)CAS 如何保证原子性?
原子类五大分类基本类型、数组、引用、属性更新器、高性能累加器原子类有哪些?
ABA 问题值 A→B→A,CAS 误判ABA 问题是什么?如何解决?
AtomicStampedReference版本号解决 ABA如何解决 ABA 问题?
LongAdder分段累加,高并发计数性能提升4倍+LongAdder 为什么比 AtomicLong 快?
VarHandleJDK 23 正式替代 UnsafeUnsafe 用什么替代?

👉 阅读完整文章

第59篇:ThreadLocal 原理与内存泄漏

📖 查看完整文章

核心概念一句话总结高频面试提问
核心设计空间换时间,每个线程独立变量副本ThreadLocal 是什么?
JDK 1.8架构Thread 对象持有 ThreadLocalMapThreadLocal 的数据存在哪里?
Entry 结构key(弱引用)+ value(强引用)Entry 的 key 为什么用弱引用?
内存泄漏根因key 被 GC 回收 → value 强引用残留 → 线程存活 → 永不释放ThreadLocal 的内存泄漏是怎么产生的?
根治方案try-finally 保证 remove() 执行如何正确使用 ThreadLocal?
remove vs set(null)remove 删除整个 Entry,set(null) 只设值为 nullremove() 和 set(null) 的区别?
InheritableThreadLocal父子线程传递子线程如何获取父线程的 ThreadLocal?
TransmittableThreadLocal线程池场景上下文传递(阿里开源)线程池中如何传递 ThreadLocal?

👉 阅读完整文章

第60篇:并发编程面试压轴题

📖 查看完整文章

核心概念一句话总结高频面试提问
30+ 高频题覆盖8大模块多线程面试考点有哪些?
锁升级无锁→偏向→轻量→重量synchronized 锁升级过程?
AQS 核心state + CLH队列 + 模板方法AQS 的核心思想?
线程池参数七大参数 + 四步流程 + 拒绝策略ThreadPoolExecutor 核心参数?
CAS 三要素内存位置 V、预期值 A、新值 BCAS 的三要素?
ThreadLocal 泄漏弱引用 key + 强引用 value + 忘记 removeThreadLocal 内存泄漏?

👉 阅读完整文章


🔥 本阶段高频面试题精选(30道必背)

线程基础篇(5题)

  1. Java 线程有哪几种状态?→ 6种:NEW → RUNNABLE → BLOCKED/WAITING/TIMED_WAITING → TERMINATED
  2. sleep()wait()的区别?→ sleep 不释放锁,wait 释放锁;sleep 时间到自醒,wait 需 notify
  3. start()run()的区别?→ start 启动新线程,run 是普通方法调用
  4. 创建线程有几种方式?→ Thread、Runnable、Callable、线程池
  5. 虚拟线程和平台线程的区别?→ 虚拟线程轻量(几百字节),M:N 调度,适合高并发 I/O

锁与 JMM 篇(6题)

  1. synchronized 锁升级过程?→ 无锁→偏向锁→轻量级锁→重量级锁,单向不可逆
  2. synchronized 的锁存在哪里?→ 对象头的 Mark Word(64位JVM占8字节)
  3. volatile 能保证原子性吗?→ 不能,i++是读-改-写三步,volatile 不保证
  4. volatile 如何保证可见性?→ 写即刷主存、读即强制重载 + 内存屏障
  5. JMM 和 JVM 内存结构的区别?→ JMM 管“怎么看见”,JVM 内存结构管“存哪里”
  6. synchronized 和 ReentrantLock 的区别?→ synchronized JVM内置有锁升级,ReentrantLock API支持超时/中断

AQS 与并发工具篇(5题)

  1. AQS 的核心三要素?→ volatile int state + CLH 双向队列 + 模板方法模式
  2. AQS 的独占模式和共享模式?→ 独占:ReentrantLock;共享:Semaphore/CountDownLatch
  3. CountDownLatch 和 Semaphore 的区别?→ CountDownLatch 倒计数不可重置,Semaphore 许可可增减
  4. AQS 的 CLH 队列是什么?→ FIFO 双向链表,存储等待线程
  5. ReentrantLock 的可重入性如何实现?→ state 计数,当前线程持有则 state++

线程池篇(4题)

  1. ThreadPoolExecutor 七大参数?→ corePoolSize、maxPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler
  2. 任务提交后的执行流程?→ 核心线程 → 任务队列 → 非核心线程 → 拒绝策略
  3. 为什么禁止使用 Executors?→ 无界队列 OOM / 无限线程资源耗尽
  4. corePoolSize 如何设置?→ CPU密集型:CPU核数+1;IO密集型:CPU核数×2

死锁与异步篇(5题)

  1. 死锁的四大必要条件?→ 互斥 + 持有并等待 + 不可剥夺 + 循环等待
  2. 如何排查死锁?jps找 PID →jstack -l <PID>→ 搜索 “deadlock”
  3. CompletableFuture 和 Future 的区别?→ Future 阻塞无法链式组合,CompletableFuture 支持链式/组合/回调
  4. thenApplythenCompose的区别?→ thenApply 同步转换,thenCompose 串联异步任务
  5. allOfanyOf的区别?→ allOf 等全部,anyOf 等任意一个

CAS 与原子类篇(4题)

  1. CAS 的三要素是什么?→ 内存位置 V、预期值 A、新值 B
  2. ABA 问题是什么?如何解决?→ 值 A→B→A,CAS 误判 → AtomicStampedReference(版本号)
  3. LongAdder 为什么比 AtomicLong 快?→ 分段累加,分散竞争
  4. Unsafe 用什么替代?→ VarHandle(JDK 9 引入,JDK 23 确立为唯一推荐)

ThreadLocal 篇(4题)

  1. ThreadLocal 内存泄漏是怎么产生的?→ Entry key 弱引用被 GC 回收,value 强引用残留 → 线程存活 → 永不释放
  2. Entry 的 key 为什么用弱引用?→ 允许 ThreadLocal 对象被 GC 回收,弱引用只是“兜底”
  3. 如何正确使用 ThreadLocal?→ try-finally 保证 remove() 执行
  4. 线程池中如何使用 ThreadLocal?→ 每次任务结束必须 remove(),防止脏读和内存泄漏
  5. InheritableThreadLocal 和 TransmittableThreadLocal 的区别?→ Inheritable 父子线程,TTL 线程池场景(阿里开源)

🧨 避坑清单(本阶段血泪教训)

坑点错误做法正确做法
synchronized 锁对象为 nullsynchronized(null)锁对象必须是非 null 引用
线程池 ExecutorsExecutors.newFixedThreadPool()无界队列手动 ThreadPoolExecutor + 有界队列
volatile 做计数器volatile int count++用 AtomicInteger 或 LongAdder
CompletableFuture 不设超时不设超时,可能永久阻塞completeOnTimeout()orTimeout()
CompletableFuture 异常未处理链中不处理异常exceptionallyhandle
CompletableFuture 用 commonPool业务异步用默认线程池自建业务线程池
ThreadLocal 用完不 remove线程池场景忘记清理try-finally 保证 remove()
ThreadLocal 存大对象存放大对象导致内存占用高存轻量级 key,大对象放缓存
ReentrantLock unlock 不写 finally异常时不释放锁finallyunlock()
死锁只用 jstack 不分析只看到死锁不改代码分析锁顺序,统一获取顺序
AtomicStampedReference 版本号不递增用 0/1 交替,仍可能漏判版本号必须严格递增
LongAdder 依赖精确值sum()做精确计算需要精确值用 AtomicLong 或加锁
虚拟线程用 synchronized高并发场景用 synchronized用 ReentrantLock 避免 Pinning

🚀 下阶段预告(第61~70篇:JVM调优与故障排查)

并发编程与 JUC 专题已收官,JVM 调优与故障排查专题(第61~70篇)即将开启:

  • 第61篇:JVM 内存区域(JDK 8+ 堆、元空间、虚拟机栈、程序计数器)
  • 第62篇:垃圾回收器详解(Serial、Parallel、CMS、G1、ZGC)
  • 第63篇:GC 调优实战(日志分析、JVM 参数、年轻代/老年代调整)
  • 第64篇:类加载器与热部署(双亲委派、Tomcat 热部署、自定义类加载器)
  • 第65篇:OOM 与内存泄漏排查(MAT、jmap、jstat、Arthas)
  • 第66篇:JIT 编译与性能优化(热点代码、逃逸分析、栈上分配)
  • 第67篇:JVM 面试压轴题

👉关注专栏 + 订阅,第一时间收到更新!


🎁 福利:本阶段全套知识点 PDF

为方便你随时复习,我把这 10 篇的核心知识点、面试题、避坑清单整理成了一份PDF速查手册(并发编程与JUC篇)

获取方式

  • 关注我的CSDN账号(点击关注)
  • 在本文评论区留言“并发通关”私信我
  • 我会将PDF下载链接发送给你

📌 下一步行动

  1. 收藏本文,随时回看知识点速查表和面试题
  2. 订阅专栏,确保后续 JVM 篇更新时第一时间收到
  3. 转发给正在学 Java 的朋友,帮他们也少走弯路
  4. 领取PDF,评论区留言“并发通关”,免费获取本阶段全套知识点手册

种一棵树最好的时间是10年前,其次是现在。
并发编程 10 篇已通关,JVM 调优专题等着你继续征服!

👉 回到完整目录导航 | 订阅进阶篇

📌 本总结文章属于《Java 100 天进阶之路 | 从入门到上岗就业》系列。
并发编程与 JUC 阶段(第51~60篇)已收官,JVM 调优与故障排查专题即将启航。感谢一路同行,我们下一阶段见!

http://www.jsqmd.com/news/1190095/

相关文章:

  • 慧净电子HL-1+HL-2小车ATmega16A寄存器库学习AVR-GCC开源工具链VS Code学习记录(第一坑)
  • C++17实战:用std::optional与std::variant构建类型安全的JSON解析器
  • C语言实现Windows调试器与全局钩子:从原理到实战
  • Haply Inverse3 力反馈设备
  • AI赋能独立游戏开发:构建3D美术全流程敏捷生产管线
  • 常州武进区湖塘镇亨得利官方钟表服务中心电话公示(2026年7月最新) - 亨得利官方博客
  • 福建福州泉州厦门起名老师水平深度测评根据本地网友真实口碑排名 - 优企甄选
  • 《Java 100 天进阶之路》并发编程与JUC详解(第51~60篇)核心知识点汇总
  • 西峰黄金回收实测大盘点!塬区居民变现避坑,3 家持证门店全维度对比 - 福金阁黄金回收
  • 2026新手抖店无货源完整实操攻略!1688一件代发合规稳做,零囤货少踩坑 - 抖掌柜
  • MATROX Y7583-00 接口模块
  • 2026 抖店新手软件选型:官方工具与 ERP 性价比及免费付费对比 - 抖大侠
  • AI伦理审计:软件测试中的公平性度量与实践
  • 浙大提出即插即用AI绘图加速方案:Stable Diffusion生成速度提升5倍
  • 湖州全屋定制哪家专业
  • 遗传算法工业级调参与可解释性实践指南
  • 2026年7月最新无锡卡地亚官方售后客服服务电话及地址网点大全 - 卡地亚服务中心
  • 全年市场调研:2026压力传感器十大品牌盘点,广东犸力覆盖中小型设备需求 - 品牌速递
  • 抖店新手避坑指南:商品上架AI违规检测完整教程,抖掌柜一站式搞定合规铺货 - 电商分享
  • 2026年度五大GEO优化公司实力测评:企业服务商选型全维度参考 - GEO优化
  • 5分钟终极指南:如何使用wechat-need-web解锁微信网页版访问限制
  • 支持百万级TPS,Kafka是怎么做到的?
  • Windows系统深度清理指南:从临时文件到专业工具全面解析
  • 2026 抖店新手最值得买的软件是什么?ERP 与运营工具免费付费推荐 - 抖大侠
  • Windows C盘清理全攻略:从手动操作到自动化工具释放磁盘空间
  • 2026年7月最新杭州余杭区五常街道亨得利官方钟表服务中心电话公示 - 亨得利官方
  • AI Agent Skills实战:流程封装与复用技术详解
  • 美度维修服务网点提供专业售后维修保养服务权威公示(2026年7月最新) - 亨得利官方服务中心
  • Vercel Skills狂揽2.4万星标:AI能力“npm化”时代,Java工程规范如何不再靠嘴说?
  • 如何5分钟掌握kill-doc:浏览器脚本技术革新文档下载体验的终极指南