Java 并发编程进阶:深挖 AQS 原理与源码实战
很多开发者虽然能调用 `synchronized` 或 `ReentrantLock`,但遇到复杂的线程协同场景时,往往只能死记硬背 API,一旦并发出现死锁或性能瓶颈就束手无策。这门课专门解决“只会用锁,不懂锁原理”以及“面对并发容器源码不敢看”的痛点。课程不讲虚头巴脑的应用层技巧,而是直接切中 Java 并发编程最核心的抽象组件——AQS(同步器),带你从底层机制去理解为什么 Java 的并发工具都长得那么像。
先建模型再啃源码,适合有基础但不懂底层的同学
这门课适合已经熟悉 Java 语法,但并发编程经验不足,或者想从初级开发转岗后端核心岗的学员。如果你还分不清 `wait/notify` 和 `Condition` 的底层差异,或者对 `ReentrantLock` 的公平与非公平策略感到困惑,建议严格按照以下顺序学习:首先快速浏览第一章中“回顾对象锁工作原理”和"AQS 概念”部分,不要急着看代码,先建立“状态位 + 队列”的宏观认知模型。只有先搞懂了 AQS 是如何通过一个 `int` 变量管理共享状态,再通过队列管理线程等待,后续看源码才能豁然开朗,否则直接硬啃代码会非常痛苦且容易走火入魔。
拒绝纸上谈兵,必须结合源码推演与调试
学完这套内容,你将不再满足于阅读官方文档,而是具备独立阅读并解析 AQS 核心源码的能力。课程会带你逐行拆解 `State` 的原子性管理逻辑、`acquire` 方法的阻塞唤醒机制以及 `Node` 节点在同步队列中的入队出队流转规则。更重要的是,你能清晰画出共享锁与独占锁在不同模式下,线程状态如何变化的完整路径。请配合视频中的源码片段进行二次开发练习,你需要能在面试现场手绘 AQS 状态流转图,并准确解释 CAS 操作在其中的具体作用。资料包中的源码旨在辅助验证讲师的讲解逻辑,请务必自行对照 JDK 真实源码进行断点调试,只有亲手修改过 `Node` 状态并观察到线程行为变化,才算真正掌握了并发锁的精髓。
课程目录
01 第一章 同步器AQS | ├──01 AQS的概念和原理 | | ├──05 1-1-4AQS源码解析之同步状态的原子性管理.mp4 8.14M | | ├──06 1-1-5AQS源码解析之acquire方法源码简介.mp4 16.37M | | ├──07 1-1-6AQS源码解析之release方法源码简介.mp4 11.32M | | ├──08 1-1-7AQS源码解析之acquireShared和releaseShared方法简介.mp4 15.15M | | ├──09 1-1-8AQS源码解析之acqureiInterruptibly和tryAcquireNanos方法简介.mp4 15.67M | | ├──【免费课程 www.ruike1.com 】01 1-0-1课程介绍和学习目标.mp4 7.84M 】02 1-1-1AQS的概念和工作模式.mp4 9.57M 】03 1-1-2回顾对象锁的工作原理.mp4 15.22M | | └──【免费课程 】04 1-1-3AQS的核心组件及工作流程.mp4 7.64M | └──02 AQS的数据结构及使用方式、Lock框架的再认识 | | ├──01 1-2-1AQS队列数据结构的基本介绍.mp4 5.67M | | ├──02 1-2-2Node内部类源码解析.mp4 10.15M | | ├──03 1-2-3同步队列节点的入队操作.mp4 32.27M | | ├──06 1-2-6等待队列节点的出队操作.mp4 20.85M | | ├──07 1-2-7共享模式下节点的入队与出队操作.mp4 27.34M | | ├──08 1-2-8关于节点的取消状态.mp4 54.28M | | ├──09 1-3-1AQS的设计模式之模板方法.mp4 33.39M | | ├──10 1-3-2自定义一个简单的互斥锁.mp4 45.98M | | ├──11 1-3-3自定义一个可重入的互斥锁.mp4 37.08M | | ├──12 1-3-4共享锁的实现思路及注意事项.mp4 23.87M | | ├──13 1-4-1Lock和synchronized的区别.mp4 26.18M | | ├──14 1-4-2公平与非公平的底层支持:可闯入策略.mp4 34.28M | | ├──16 1-4-4读写锁ReentrantReadWriteLock的基本使用.mp4 18.02M | | ├──17 1-4-5读写锁的适用性与关注点.mp4 18.22M | | ├──18 1-4-6Callable、Future和FutureTask回顾.mp4 24.73M | | ├──19 1-4-7ForkJoin框架与工作秘取的基本概念.mp4 7.55M | | ├──20 1-4-8ForkJoinTask与两个常用子类RecursiveTask、RecursiveAction源码概述.mp4 31.04M | | ├──21 1-4-9ForkJoin案例:分别使用单线程和fork-join框架运算数组元素之和.mp4 60.17M | | ├──22 1-4-10ForkJoin案例:使用RecursiveAction遍历目录(含子目录)打印指定类型文件.mp4 30.69M 】04 1-2-4同步队列节点的出队操作.mp4 21.11M 】05 1-2-5等待队列节点的入队操作.mp4 23.97M 】15 1-4-3使用synchronized关键字实现读多写少的测试.mp4 30.75M 02 第二章 并发容器 | ├──00 资料 | | └──Java并发编程高阶技术实践 | └──01 并发容器-课程所有资料在本节下载 | | ├──01 2-0-1课程介绍与学习目标.mp4 4.47M | | ├──02 2-1-1ConcurrentHashMap预备知识:hash算法和位运算.mp4 12.56M | | ├──03 2-1-2ConcurrentHashMap数据结构预览.mp4 11.96M | | ├──04 2-1-3ConcurrentHashMap在jdk1.7及以前的实现原理概述.mp4 7.88M | | ├──05 2-1-4ConcurrentHashMap在jdk1.7及以前的初始化源码解析.mp4 30.25M | | ├──06 2-1-5ConcurrentHashMap在jdk1.7及以前的get()方法源码解析.mp4 35.80M | | ├──07 2-1-6ConcurrentHashMap在jdk1.7及以前的put()方法源码解析.mp4 40.30M | | ├──08 2-1-7ConcurrentHashMap在jdk1.7及以前的扩容机制和size()方法源码解析.mp4 33.44M | | ├──09 2-1-8ConcurrentHashMap在jdk8及以后的实现原理概述.mp4 14.75M | | ├──10 2-1-9ConcurrentHashMap在jdk8及以后的初始化和put()方法源码解析.mp4 63.95M | | ├──11 2-1-10ConcurrentHashMap在jdk8及以后的get()方法源码解析.mp4 13.32M | | ├──12 2-1-11ConcurrentHashMap在jdk8及以后的扩容机制和size()方法源码解析.mp4 42.42M | | ├──13 2-1-12ConcurrentHashMap在jdk8及以后的总结.mp4 26.94M | | ├──14 2-2-1跳表SkipList的工作原理.mp4 10.96M | | ├──15 2-2-2无界非阻塞队列ConcurrentLinkedQueue简介.mp4 6.66M | | ├──16 2-2-3写时复制容器简介.mp4 5.22M | | ├──17 2-3-1阻塞队列的概念及由来.mp4 6.18M | | ├──18 2-3-2阻塞队列的常用方法辨析.mp4 43.16M | | ├──19 2-3-3常见阻塞队列及各自特点辨析.mp4 72.36M | | ├──20 2-3-4使用DelayQueue实现延时订单-延时队列元素工具类定义.mp4 43.43M | | ├──21 2-3-5使用DelayQueue实现延时订单-生产者和消费者线程定义及测试.mp4 44.92M | | └──22 2-3-6阻塞队列的底层实现:显示锁+等待通知机制.mp4 13.66M 03 第三章 线程池 | └──01 线程池 | | ├──01 3-0-1课程介绍与学习目标.mp4 6.18M | | ├──02 3-1-1线程池的概念和好处.mp4 13.93M | | ├──03 3-1-2自定义线程池:思路分析.mp4 15.05M | | ├──04 3-1-3自定义线程池:创建线程池,初始化工作线程.mp4 30.45M | | ├──05 3-1-4自定义线程池:工作线程从任务队列中获取任务并执行.mp4 26.83M | | ├──06 3-1-5自定义线程池:提供execute方法供调用者执行任务.mp4 13.84M | | ├──07 3-1-6自定义线程池:提供destroy方法用于销毁线程池.mp4 23.18M | | ├──08 3-1-7自定义线程池:测试及线程池工作流程.mp4 50.06M | | ├──09 3-2-1ThreadPoolExecutor源码分析:初始化线程池参数.mp4 71.45M | | ├──10 3-2-2ThreadPoolExecutor源码分析:提交任务execute和submit方法.mp4 35.14M | | ├──11 3-2-3ThreadPoolExecutor源码分析:关闭线程池shutdown和shutdowNow方法.mp4 7.27M | | ├──12 3-2-4线程池工作机制.mp4 6.75M | | ├──13 3-2-5使用ThreadPoolExecutor创建线程池并使用.mp4 33.10M | | ├──14 3-2-6提交带返回值的任务到ThreadPoolExecutor线程池.mp4 28.20M | | ├──15 3-2-7线程池的关闭:shutdown与shutdownNow方法的使用.mp4 28.07M | | ├──16 3-2-8合理配置线程池.mp4 18.06M | | ├──17 3-3-1系统预定义线程池简介.mp4 22.43M | | ├──18 3-3-2定时任务ScheduledThreadPoolExecutor用法.mp4 61.43M | | ├──19 3-3-3定时任务ScheduledThreadPoolExecutor异常处理.mp4 24.77M | | ├──20 3-3-4Executor框架继承体系和使用流程.mp4 27.28M | | ├──21 3-3-5CompletionService按线程池中任务完成顺序获取结果.mp4 40.14M | | └──22 3-3-6CompletionService实现原理.mp4 18.50M 04 第四章 并发安全 | └──01 并发安全 | | ├──01 4-0-1并发安全:课程简介和学习目标.mp4 7.64M | | ├──02 4-1-1什么是类的线程安全.mp4 7.47M | | ├──03 4-1-2类的线程安全:无状态、加锁和CAS操作.mp4 11.20M | | ├──04 4-1-3类的线程安全:让类不可变 - 属性加final.mp4 24.86M | | ├──05 4-1-4类的线程安全:让类不可变 - 不提供修改属性的方式.mp4 19.30M | | ├──06 4-1-5类的线程安全:栈封闭.mp4 26.93M | | ├──07 4-1-6类的线程安全:volatile、安全的发布、ThreadLocal.mp4 17.69M | | ├──08 4-2-1死锁产生的原因.mp4 4.71M | | ├──09 4-2-2常见的死锁发生的两个场景.mp4 26.41M | | ├──10 4-2-3动态顺序死锁的产生.mp4 17.28M | | ├──11 4-2-4动态顺序死锁的解决方案一:内在排序.mp4 46.14M | | ├──12 4-2-5动态顺序死锁的解决方案二:Lock.tryLock方法.mp4 35.81M | | ├──13 4-2-6活锁与饥饿.mp4 25.22M | | ├──14 4-3-1衡量多线程引用性能的指标与影响因素.mp4 16.12M 】15 4-3-2锁优化:缩小锁的范围.mp4 32.32M 】16 4-3-3锁优化:减少锁的粒度.mp4 20.92M 】17 4-3-4锁优化:锁分段和替换独占锁.mp4 7.93M 】18 4-3-5常见的两种单例设计模式.mp4 13.40M 】19 4-3-6使用枚举实现单例:防止反射攻击.mp4 8.95M 】20 4-3-7懒汉式单例模式:双重检查确保并发安全.mp4 13.20M 】21 4-3-8懒汉式单例模式:双重检查的问题及解决方案.mp4 15.63M 】22 4-3-9单例设计模式大杀器:延迟占位模式.mp4 24.65M 05 第五章 Java内存模型 | └──01 Java内存模型 | | ├──01 5-0-1课程介绍与学习目标.mp4 6.50M | | ├──02 5-1-1现代计算机物理内存模型.mp4 15.58M | | ├──03 5-1-2物理内存模型带来的问题.mp4 16.37M | | ├──04 5-2-1并发编程模型的分类.mp4 10.55M | | ├──05 5-2-3Java内存模型图示.mp4 11.45M | | ├──06 5-2-4Java线程通信的实现.mp4 4.50M | | ├──07 5-2-5Java虚拟机的体系结构.mp4 12.49M | | ├──08 5-2-6JMM在JVM中的实现:栈【1】.mp4 10.05M | | ├──09 5-2-7JMM在JVM中的实现:堆.mp4 4.91M | | ├──10 5-2-8JMM在JVM中的实现:方法区.mp4 15.88M | | ├──11 5-2-9堆栈溢出异常:StackOverFlowError和OutOfMemoryError.mp4 19.89M | | ├──12 5-2-10基于共享内存的JMM的问题:可见性和竞争.mp4 5.89M | | ├──13 5-2-11重排序的概念和分类.mp4 12.77M | | ├──14 5-2-12重排序与依赖性:数据依赖性.mp4 16.45M | | ├──15 5-2-13重排序与依赖性:控制依赖性与as-if-serieal语义.mp4 14.58M | | ├──16 5-2-14并发下重排序的问题.mp4 18.05M | | ├──17 5-2-15并发下重排序问题的解决方案:临界区.mp4 8.34M | | ├──18 5-2-16并发下重排序问题的解决方案:内存屏障.mp4 15.09M | | ├──19 5-3-1Happens-Before规则的概念.mp4 7.62M | | ├──20 5-3-2无须任何同步手段就可以保证的Happens-Before规则.mp4 13.66M | | ├──21 5-3-3final关键字的内存语义.mp4 12.00M | | ├──22 5-3-4volatile关键字的内存语义.mp4 4.34M | | ├──23 5-3-5volatile关键字内存语义的实现.mp4 10.27M | | ├──24 5-4-1锁的内存语义.mp4 4.18M | | └──25 5-4-2synchronized的实现原理.mp4 6.62M ——/hm-Java并发编程进阶技术实践/├──01 第一章 同步器AQS | ├──01 AQS的概念和原理 | | ├──05 1-1-4AQS源码解析之同步状态的原子性管理.mp4 8.1 hm-Java并发编程进阶技术实践





