课程简介
本课程专注于Java并发编程,深入讲解每一个Java程序员必须掌握的核心技能。通过系统学习同步器AQS、并发容器、线程池、并发安全以及Java内存模型等五大关键领域,你将建立起全面的并发编程知识体系。课程不仅涵盖理论讲解,还结合大量源码解析和实战案例,确保你能够在实际工作中灵活运用所学知识,构建高并发、高可用的系统架构。
课程目录
第一章 同步器AQS
- 1. AQS的概念和原理
- • 课程介绍和学习目标
- • AQS的概念和工作模式
- • 回顾对象锁的工作原理
- • AQS的核心组件及工作流程
- • AQS源码解析之同步状态的原子性管理
- • AQS源码解析之acquire方法源码简介
- • AQS源码解析之release方法源码简介
- • AQS源码解析之acquireShared和releaseShared方法简介
- • AQS源码解析之acquireInterruptibly和tryAcquireNanos方法简介
- 2. AQS的数据结构及使用方式、Lock框架的再认识
- • AQS队列数据结构的基本介绍
- • Node内部类源码解析
- • 同步队列节点的入队操作
- • 同步队列节点的出队操作
- • 等待队列节点的入队操作
- • 等待队列节点的出队操作
- • 共享模式下节点的入队与出队操作
- • 关于节点的取消状态
- • AQS的设计模式之模板方法
- • 自定义一个简单的互斥锁
- • 自定义一个可重入的互斥锁
- • 共享锁的实现思路及注意事项
- • Lock和synchronized的区别
- • 公平与非公平的底层支持:可闯入策略
- • 使用synchronized关键字实现读多写少的测试
- • 读写锁ReentrantReadWriteLock的基本使用
- • 读写锁的适用性与关注点
- • Callable、Future和FutureTask回顾
- • ForkJoin框架与工作秘取的基本概念
- • ForkJoinTask与两个常用子类RecursiveTask、RecursiveAction源码概述
- • ForkJoin案例:分别使用单线程和fork-join框架运算数组元素之和
- • ForkJoin案例:使用RecursiveAction遍历目录(含子目录)打印指定类型文件
第二章 并发容器
- 1. 并发容器-课程所有资料在本节下载
- • 课程介绍与学习目标
- • ConcurrentHashMap预备知识:hash算法和位运算
- • ConcurrentHashMap数据结构预览
- • ConcurrentHashMap在jdk1.7及以前的实现原理概述
- • ConcurrentHashMap在jdk1.7及以前的初始化源码解析
- • ConcurrentHashMap在jdk1.7及以前的get()方法源码解析
- • ConcurrentHashMap在jdk1.7及以前的put()方法源码解析
- • ConcurrentHashMap在jdk1.7及以前的扩容机制和size()方法源码解析
- • ConcurrentHashMap在jdk8及以后的实现原理概述
- • ConcurrentHashMap在jdk8及以后的初始化和put()方法源码解析
- • ConcurrentHashMap在jdk8及以后的get()方法源码解析
- • ConcurrentHashMap在jdk8及以后的扩容机制和size()方法源码解析
- • ConcurrentHashMap在jdk8及以后的总结
- • 跳表SkipList的工作原理
- • 无界非阻塞队列ConcurrentLinkedQueue简介
- • 写时复制容器简介
- • 阻塞队列的概念及由来
- • 阻塞队列的常用方法辨析
- • 常见阻塞队列及各自特点辨析
- • 使用DelayQueue实现延时订单-延时队列元素工具类定义
- • 使用DelayQueue实现延时订单-生产者和消费者线程定义及测试
- • 阻塞队列的底层实现:显示锁+等待通知机制
第三章 线程池
- 1. 线程池
- • 课程介绍与学习目标
- • 线程池的概念和好处
- • 自定义线程池:思路分析
- • 自定义线程池:创建线程池,初始化工作线程
- • 自定义线程池:工作线程从任务队列中获取任务并执行
- • 自定义线程池:提供execute方法供调用者执行任务
- • 自定义线程池:提供destroy方法用于销毁线程池
- • 自定义线程池:测试及线程池工作流程
- • ThreadPoolExecutor源码分析:初始化线程池参数
- • ThreadPoolExecutor源码分析:提交任务execute和submit方法
- • ThreadPoolExecutor源码分析:关闭线程池shutdown和shutdowNow方法
- • 线程池工作机制
- • 使用ThreadPoolExecutor创建线程池并使用
- • 提交带返回值的任务到ThreadPoolExecutor线程池
- • 线程池的关闭:shutdown与shutdownNow方法的使用
- • 合理配置线程池
- • 系统预定义线程池简介
- • 定时任务ScheduledThreadPoolExecutor用法
- • 定时任务ScheduledThreadPoolExecutor异常处理
- • Executor框架继承体系和使用流程
- • CompletionService按线程池中任务完成顺序获取结果
- • CompletionService实现原理
第四章 并发安全
- 1. 并发安全
- • 课程简介和学习目标
- • 什么是类的线程安全
- • 类的线程安全:无状态、加锁和CAS操作
- • 类的线程安全:让类不可变 – 属性加final
- • 类的线程安全:让类不可变 – 不提供修改属性的方式
- • 类的线程安全:栈封闭
- • 类的线程安全:volatile、安全的发布、ThreadLocal
- • 死锁产生的原因
- • 常见的死锁发生的两个场景
- • 动态顺序死锁的产生
- • 动态顺序死锁的解决方案一:内在排序
- • 动态顺序死锁的解决方案二:Lock.tryLock方法
- • 活锁与饥饿
- • 衡量多线程引用性能的指标与影响因素
- • 锁优化:缩小锁的范围
- • 锁优化:减少锁的粒度
- • 锁优化:锁分段和替换独占锁
- • 常见的两种单例设计模式
- • 使用枚举实现单例:防止反射攻击
- • 懒汉式单例模式:双重检查确保并发安全
- • 懒汉式单例模式:双重检查的问题及解决方案
- • 单例设计模式大杀器:延迟占位模式
第五章 Java内存模型
- 1. Java内存模型
- • 课程介绍与学习目标
- • 现代计算机物理内存模型
- • 物理内存模型带来的问题
- • 并发编程模型的分类
- • Java内存模型图示
- • Java线程通信的实现
- • Java虚拟机的体系结构
- • JMM在JVM中的实现:栈
- • JMM在JVM中的实现:堆
- • JMM在JVM中的实现:方法区
- • 堆栈溢出异常:StackOverFlowError和OutOfMemoryError
- • 基于共享内存的JMM的问题:可见性和竞争
- • 重排序的概念和分类
- • 重排序与依赖性:数据依赖性
- • 重排序与依赖性:控制依赖性与as-if-serieal语义
- • 并发下重排序的问题
- • 并发下重排序问题的解决方案:临界区
- • 并发下重排序问题的解决方案:内存屏障
- • Happens-Before规则的概念
- • 无须任何同步手段就可以保证的Happens-Before规则
- • final关键字的内存语义
- • volatile关键字的内存语义
- • volatile关键字内存语义的实现
- • 锁的内存语义
- • synchronized的实现原理
请先
!