Java 并发编程:从底层原理到生产实战

Java 后端开发中,多线程与并发往往是性能瓶颈的根源,也是技术面试的重灾区。这套课程并不泛泛而谈线程基础,而是深入 JVM 底层和 JDK 核心源码,重点讲解 HashMap、ConcurrentHashMap、ThreadLocal 以及 synchronized 锁机制的实现原理。它适合有一定 Java 基础、希望突破并发编程瓶颈的开发者,尤其是对源码感兴趣、想在面试或工作中讲清楚“为什么”的人。

课程解决的核心问题

很多开发者知道 HashMap 不是线程安全的,但说不清具体会出什么问题;知道用 ConcurrentHashMap,却对 CAS、分段锁、红黑树转换缺乏理解;会用 synchronized,但不清楚偏向锁、轻量级锁、重量级锁的升级过程。本课程通过源码剖析和内存布局分析,帮你建立完整的并发知识体系。

课程首先从 HashMap 的底层数据结构讲起,深入分析哈希碰撞、链表转红黑树的阈值选择,以及在多线程环境下可能出现的数据丢失、死循环等问题。随后自然过渡到 ConcurrentHashMap,讲解其如何通过分段锁或 CAS+ 同步来实现高并发下的线程安全。这部分内容直接对应高频面试题和实际工作中的性能优化需求。

在锁机制方面,课程详细拆解了 synchronized 的底层实现,包括对象锁、类锁、偏向锁、轻量级锁和重量级锁的升级路径,以及死锁的产生原因和解决方法。此外,ThreadLocal 的应用场景和内存泄漏问题也是重点内容,帮助开发者避免常见的内存泄漏陷阱。

学习建议与资料使用

建议按以下顺序学习:第一阶段先掌握 HashMap 和 ConcurrentHashMap 的原理,这是并发集合的基础;第二阶段深入理解 synchronized 锁机制和线程安全相关概念;第三阶段攻克 ThreadLocal 和单例模式的高级议题。

资料包中包含完整的视频课程和配套源码。观看视频时,建议结合源码进行阅读,尤其是 HashMap、ConcurrentHashMap 和 ThreadLocal 的核心方法实现。对于锁机制部分,可以通过 JOL(Java Object Layout)工具查看对象内存布局,直观理解锁升级过程。练习时,尝试复现多线程环境下的 HashMap 死循环场景,或编写 ThreadLocal 内存泄漏的测试用例,加深理解。

学完后,你将能够独立分析并发场景下的性能问题,理解主流框架中并发组件的设计思想,并能在面试中清晰阐述底层原理。课程适合具备 Java 基础、希望系统提升并发编程能力的开发者,不建议完全没有多线程概念的初学者直接上手。

课程目录

📁 05 5-

15 ThreadLocal的实现原理?.avi [82.6 MB] 5-8 多线程条件下HashMap都存在什么问题?.avi [27.3 MB] 5-11 HashMap链表节点过深时为什么选择使用红黑树3?.avi [44.6 MB] 5-12 什么是hash碰撞,发生hash碰撞怎么办?.avi [51.9 MB] 5-7 多线程条件下HashMap数据丢失问题?.avi [26.7 MB] 5-4 HashMap有哪些主要特征和注意事项?.avi [35.7 MB] 5-3 说说你对HashMap的理解和认识?.avi [12.5 MB] 5-14 ConcurrentHashMap的底层实现原理2?.avi [43.0 MB] 5-13 ConcurrentHashMap的底层实现原理1?.avi [44.1 MB] 5-9 HashMap链表节点过深时为什么选择使用红黑树1?.avi [26.1 MB] 5-10 HashMap链表节点过深时为什么选择使用红黑树2?.avi [36.6 MB] 5-2 ThreadLocal应用.avi [144.8 MB] 5-1 ThreadLocal是什么?.avi [110.4 MB] 5-16 ThreadLocal为什么会发生内存泄漏?.avi [51.2 MB] 5-6 HashMap多线程条件下死循环是怎么回事?.avi [36.7 MB] 5-5 说说HashMap的底层数据存储结构?.avi [34.4 MB] 📁 03 3-48 饿汉式单例防反射攻击.mp4
 [84.5 MB] 3-9 Java对象内存布局.avi [27.6 MB] 3-

38 volatile与有序性.avi [56.1 MB] 3-

21 重量级锁底层实现原理.avi [71.4 MB] 3-

32 synchronized与脏读问题.avi [99.6 MB] 3-

27 死锁案例分析.avi [85.5 MB] 3-

12 偏向锁.avi [51.6 MB] 3-7 synchronized类锁.avi [53.0 MB] 3-51 懒汉式单例反序列化攻击.mp4
 [59.5 MB] 3-

10 JOL查看Java对象内存布局.avi [57.0 MB] 3-

25 用户态和内核态.avi [90.6 MB] 3-58 开源项目中的单例设计模式.mp4
 [111.7 MB] 3-30 死锁如何解决2?.avi [51.1 MB] 3-6 synchronized对象锁.avi [75.7 MB] 3-54 静态内部类反射与序列化攻击.mp4
 [79.8 MB] 3-

41 多线程单例模式-懒汉式设计.avi [20.0 MB] 3-

46 多线程单例模式-静态内部类设计.avi [27.9 MB] 3-47 多线程单例模式-枚举类设计.mp4
 [80.7 MB] 3-

16 轻量级锁.avi [24.9 MB] 3-3 线程上下文切换原子性问题.avi [26.7 MB] 3-57 单例设计模式性能比较.mp4
 [98.6 MB] 3-55 枚举类单例反射攻击剖析.mp4
 [122.2 MB] 3-29 死锁如何解决1?.avi [51.2 MB] 3-49 饿汉式单例防反序列化攻击.mp4
 [116.2 MB] 3-

36 volatile关键字的应用.avi [30.4 MB] 3-52 懒汉式单例的攻击问题.mp4
 [62.4 MB] 3-

43 多线程单例模式-DCL设计.avi [31.3 MB] 3-

28 产生死锁的四个必要条件.avi [20.0 MB] 3-

39 volatile的使用场景.avi [49.6 MB] 3-

24 重量级锁释放.avi [32.8 MB] 3-

18 轻量级锁释放.avi [80.0 MB] 3-

22 synchronized锁膨胀.avi [79.0 MB] 3-

34 聊聊CPU三级高速缓存.avi [175.1 MB] 3-

15 偏向锁的设计思想.avi [17.8 MB] 3-

44 多线程单例模式-DCL重排序设计.avi [10.9 MB] 3-

26 synchronized死锁问题.avi [31.8 MB] 3-

42 多线程单例模式-懒汉式安全设计.avi [13.5 MB] 3-31 死锁如何解决3?.avi [18.8 MB] 3-1 什么是线程安全?.avi [47.5 MB] 3-

23 重量级锁加锁.avi [55.4 MB] 3-5 synchronized解决线程安全.avi [25.7 MB] 3-2 线程安全原子性问题.avi [14.1 MB] 3-

13 偏向锁加锁.avi [32.0 MB] 3-

45 多线程单例模式-静态代码块设计.avi [11.3 MB] 3-56 枚举类单例序列化攻击剖析.mp4
 [78.7 MB] 3-

40 多线程单例模式-饿汉式设计.avi [31.6 MB] 3-

20 重量级锁.avi [35.9 MB] 3-53 静态代码块反射与序列化攻击.mp4
 [107.0 MB] 3-8 Java对象头Mark Word结构分析.avi [33.6 MB] 3-4 指令原子性问题的分析.avi [30.4 MB] 3-

19 轻量级锁的设计思想.avi [15.5 MB] 3-50 懒汉式单例反射攻击.mp4
 [101.4 MB] 3-

37 volatile可见性与原子性.avi [54.1 MB] 3-

33 内存不可见问题.avi [38.6 MB] 3-

11 对象头Mark Word中VALUE值解读.avi [50.0 MB] 3-

17 轻量级锁加锁.avi [67.1 MB] 3-

14 偏向锁释放.avi [34.8 MB] 3-

35 Java内存模型.avi [99.0 MB] 📁 01 1-57 Java线程的6种状态-阻塞状态BLOCKED.avi [53.4 MB] 1-4 走进并发编程-Amdahl定律.avi [20.2 MB] 1-53 Java线程的6种状态-运行状态RUNNABLE.avi [50.4 MB] 1-

30 线程Thread API-yield方法.avi [28.0 MB] 1-

31 线程Thread API-getContextClassLoader.avi [46.5 MB] 1-20 循序渐进去认识Java线程-一条新的执行路径.avi [42.3 MB] 1-47 线程阻塞工具类LockSupport-超时阻塞与唤醒.avi [51.3 MB] 1-24 循序渐进去认识Java线程-当前线程与休眠.avi [43.9 MB] 1-48 线程阻塞工具类LockSupport-阻塞与唤醒的特点.avi [74.6 MB] 1-

37 Object wait() interrupt()方法解读.avi [23.7 MB] 1-

38 Object notifyAll()方法解读.avi [21.8 MB] 1-8 如何查看进程下的线程及CPU占用率-Linux.avi [20.9 MB] 1-43 手写实现生产者-消费者模式-生产消费代码实现.avi [24.3 MB] 1-

11 线程有哪些实现方式-内核线程.avi [34.6 MB] 1-52 Java线程的6种状态-终止状态TERMINATED.avi [17.8 MB] 1-

36 Object wait() notify()方法解读.avi [45.6 MB] 1-18 在Java中创建线程的方式Executor.avi [15.2 MB] 1-

28 线程Thread API-join方法1.avi [29.1 MB] 1-58 Java线程的6种状态-竞争Lock锁的线程状态.avi [28.9 MB] 1-

39 Object wait() notify() notifyAll()方法解读.avi [110.9 MB] 1-15 在Java中创建线程的方式继承Thread.avi [27.3 MB] 1-56 Java线程的6种状态-超时等待状态TIMED_WAITING.avi [40.2 MB] 1-19 在Java中创建线程的方式ThreadPoolTaskExecutor.avi [78.9 MB] 1-

12 Linux系统能创建多少个Java线程?.avi [58.0 MB] 1-

14 再认识一下Java中的线程.avi [26.9 MB] 1-

34 线程Thread API-priority线程优先级.avi [15.7 MB] 1-1 走进并发编程-计算机的基本组成.avi [18.7 MB] 1-

35 Object wait()方法解读.avi [45.7 MB] 1-25 main线程执行结束后,在main线程中创建的子线程是否也自动结束?.avi [42.8 MB] 1-54 Java线程的6种状态-等待状态WAITING.avi [27.0 MB] 1-

29 线程Thread API-join方法2.avi [17.5 MB] 1-17 在Java中创建线程的方式实现Callable.avi [30.0 MB] 1-26 守护线程是怎么回事1?.avi [44.0 MB] 1-22 循序渐进去认识Java线程-Java多线程程序如何Debug调试?.avi [19.7 MB] 1-50 线程阻塞工具类LockSupport-阻塞与唤醒的特点.avi [24.0 MB] 1-

59 通过jstack查看线程状态.avi [63.0 MB] 1-23 循序渐进去认识Java线程-线程start与run方法.avi [39.0 MB] 1-

32 线程Thread API-interrupt线程中断1.avi [38.1 MB] 1-27 守护线程是怎么回事2?.avi [25.6 MB] 1-55 Java线程的6种状态-等待状态WAITING转换到运行状态RUNNABLE.avi [49.4 MB] 1-7 如何查看进程下的线程及CPU占用率-Windows.avi [30.4 MB] 1-21 循序渐进去认识Java线程-多线程执行创建几个虚拟机栈?.avi [32.0 MB] 1-49 线程阻塞工具类LockSupport-阻塞与唤醒的特点.avi [14.6 MB] 1-

33 线程Thread API-interrupt线程中断2.avi [16.6 MB] 1-16 在Java中创建线程的方式实现Runnable.avi [11.7 MB] 1-3 走进并发编程-摩尔定律.avi [75.3 MB] 1-

41 手写实现生产者-消费者模式-代码骨架定义.avi [36.9 MB] 1-

13 线程有哪些实现方式-用户线程.avi [39.5 MB] 1-

10 Java底层是如何创建一个线程的?.avi [61.1 MB] 1-42 手写实现生产者-消费者模式-生产消费基础代码骨架.avi [16.0 MB] 1-44 手写实现生产者-消费者模式-生产消费代码实现.avi [37.6 MB] 1-

45 手写实现生产者-消费者模式-生产消费测试.avi [50.6 MB] 1-

46 线程阻塞工具类LockSupport.avi [35.6 MB] 1-9 如何下载JDK源码.avi [20.9 MB] 1-51 Java线程的6种状态-初始状态NEW.avi [32.1 MB] 1-6 进程与线程.avi [35.7 MB] 1-2 走进并发编程-认识一下CPU.avi [47.7 MB] 1-5 什么是并行什么是并发?.avi [30.6 MB] 1-

40 手写实现生产者-消费者模式.avi [18.8 MB] 📁 04 4-2 Callable接口.avi [57.6 MB] 4-4 FutureTask类1.avi [45.4 MB] 4-5 FutureTask类2.avi [117.7 MB] 4-1 Runnable接口.avi [40.2 MB] 4-3 Future接口.avi [75.3 MB] 📁 02 2-27 线程池底层源码实现分析-线程池底层实现核心源码分析2?.avi [45.7 MB] 2-

61 线程池要不要关闭,怎么关闭?.avi [56.4 MB] 2-

55 线程池的监控-数据定时采集.avi [53.0 MB] 2-4 Executor框架的接口与类结构.avi [58.6 MB] 2-40 工作中线程池的应用4.avi [61.6 MB] 2-12 线程池自定义拒绝策略应用场景案例-需求分析.avi [18.3 MB] 2-38 工作中线程池的应用2.avi [16.7 MB] 2-35 线程池底层源码实现分析-线程池底层实现核心源码线程个数动态变化分析.avi [76.5 MB] 2-

54 线程池的监控.avi [62.7 MB] 2-8 线程池的7大参数解读-线程工厂.avi [50.2 MB] 2-

46 如何设计实现一个动态线程池?.avi [16.9 MB] 2-42 如何合理设置线程池大小2?.avi [23.7 MB] 2-7 线程池的7大参数解读-空闲线程超时销毁.avi [16.0 MB] 2-34 线程池底层源码实现分析-线程池底层实现核心源码线程复用分析.avi [36.3 MB] 2-14 线程池自定义拒绝策略应用场景案例-代码测试.avi [32.8 MB] 2-28 线程池底层源码实现分析-线程池底层实现核心源码分析3?.avi [23.6 MB] 2-51 如何设计实现一个动态线程池-自动刷新2?.avi [149.7 MB] 2-29 线程池底层源码实现分析-线程池底层实现核心源码addWorker分析1?.avi [50.0 MB] 2-41 如何合理设置线程池大小1?.avi [26.1 MB] 2-32 线程池底层源码实现分析-线程池底层实现核心源码runWorker方法分析.avi [53.2 MB] 2-

18 线程池底层源码实现分析-构造方法.avi [38.3 MB] 2-57 线程池的监控-数据定时采集代码实现2.avi [119.3 MB] 2-36 线程池底层源码实现分析-线程池底层实现核心源码流程画图总结.avi [67.0 MB] 2-39 工作中线程池的应用3.avi [40.4 MB] 2-48 如何设计实现一个动态线程池-集成配置中心?.avi [49.4 MB] 2-

52 创建线程池的方式及阿里规范.avi [63.9 MB] 2-

60 线程池要不要关闭?.avi [53.7 MB] 2-26 线程池底层源码实现分析-线程池底层实现核心源码分析1?.avi [48.5 MB] 2-30 线程池底层源码实现分析-线程池底层实现核心源码addWorker分析2?.avi [53.2 MB] 2-

15 一些开源项目实现的拒绝策略.avi [64.2 MB] 2-

53 线程池的扩展钩子方法.avi [53.5 MB] 2-25 线程池底层源码实现分析-线程池状态和工作线程数控制变量?.avi [8.5 MB] 2-1 什么是线程池?.avi [17.9 MB] 2-

19 线程池底层源码实现分析-控制变量.avi [44.7 MB] 2-9 线程池内置的四种拒绝策略-异常和丢弃策略.avi [38.8 MB] 2-

58 线程池关闭shutdownNow().avi [68.9 MB] 2-

20 线程池底层源码实现分析-线程池状态值.avi [45.7 MB] 2-45 如何合理设置线程池大小5?.avi [53.9 MB] 2-21 线程池底层源码实现分析-线程池控制变量ctl.avi [22.7 MB] 2-31 线程池底层源码实现分析-线程池底层实现核心源码addWorker分析3?.avi [49.3 MB] 2-5 线程池的7大参数解读-核心线程数.avi [48.5 MB] 2-3 Java线程池之Executor框架.avi [35.0 MB] 2-

59 线程池关闭shutdown().avi [42.9 MB] 2-

17 线程池底层源码实现分析-数字的进制.avi [73.5 MB] 2-23 线程池底层源码实现分析-解包ctl获取线程池工作线程个数.avi [39.8 MB] 2-10 线程池内置的四种拒绝策略-丢弃最老和主线程执行策略.avi [53.0 MB] 2-43 如何合理设置线程池大小3?.avi [36.5 MB] 2-2 为什么要有线程池?.avi [17.6 MB] 2-50 如何设计实现一个动态线程池-自动刷新1?.avi [13.3 MB] 2-56 线程池的监控-数据定时采集代码实现1.avi [90.6 MB] 2-22 线程池底层源码实现分析-解包ctl获取线程池运行状态.avi [73.7 MB] 2-24 线程池底层源码实现分析-线程池状态和工作线程数为什么用一个变量而不用两个变量?.avi [35.5 MB] 2-

49 如何设计实现一个动态线程池-代码实现?.avi [82.5 MB] 2-37 工作中线程池的应用1.avi [59.0 MB] 2-44 如何合理设置线程池大小4?.avi [62.5 MB] 2-6 线程池的7大参数解读-任务队列与最大线程数.avi [23.8 MB] 2-

47 如何设计实现一个动态线程池-环境准备?.avi [47.6 MB] … 其余 6 项略,目录共 206 项