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