第1章 课程介绍与并发简介
第1节 课程简介
第2节 什么是并发编程
第3节 并发编程的挑战之频繁的上下文切换
第4节 并发编程的挑战之死锁
第5节 并发编程的挑战之线程安全
第6节 并发编程的挑战之资源限制
第2章 线程基础
第1节 进程与线程的区别
第2节 线程的状态及其相互转换
第3节 创建线程的方式(上)
第4节 创建线程的方式(下)
第5节 线程的挂起跟恢复
第6节 线程的中断操作
第7节 线程的优先级
第8节 守护线程
第3章 线程安全性
第1节 什么是线程安全性?
第2节 从字节码角度剖析线程不安全操作
第3节 原子性操作
第4节 深入理解synchronized
第5节 volatile关键字及其使用场景
第6节 单例与线程安全
第7节 如何避免线程安全性问题
第4章 锁
第1节 锁的分类
第2节 深入理解Lock接口
第3节 实现属于自己的锁
第4节 AbstractQueuedSynchronizer浅析
第5节 深入剖析ReentrantLock源码之非公平锁的实现
第6节 深入剖析ReentrantLock源码之公平锁的实现
第7节 掌控线程执行顺序之多线程debug
第8节 读写锁特性及ReentrantReadWriteLock的使用
第9节 源码探秘之AQS如何用单一int值表示读写两种状态
第10节 深入剖析ReentrantReadWriteLock之读锁源码实现
第11节 深入剖析ReentrantReadWriteLock之写锁源码实现
第12节 锁降级详解
第13节 StampedLock原理及使用
第5章 线程间的通信
第1节 wait、notify、notifyAll
第2节 等待通知经典模型之生产者消费者
第3节 使用管道流进行通信
第4节 Thread.join通信及其源码浅析
第5节 ThreadLocal的使用
第6节 Condition的使用
第6章 原子类
第1节 什么是原子类
第2节 原子更新基本类型
第3节 原子更新数组类型
第4节 原子地更新属性
第5节 原子更新引用
第7章 容器
第1节 同步容器与并发容器
第2节 同步容器
第3节 并发容器
第4节 LinkedBlockingQueue的使用及其源码探秘
第8章 并发工具类
第1节 CountDownLatch的使用及其源码探秘
第2节 CyclicBarrier的使用及其源码探秘
第3节 Semaphore的使用及其源码探秘
第4节 Exchanger的使用
第9章 线程池及Executor框架
第1节 为什么要使用线程池?
第2节 创建线程池及其使用
第3节 Future与Callable、FutureTask
第4节 线程池的核心组成部分及其运行机制
第5节 线程池拒绝策略
第6节 Executor框架
第7节 线程池的使用建议
第10章 jvm与并发
第1节 jvm内存模型
第2节 先行发生原则 happens-before
第3节 指令重排序
第11章 实战
第1节 数据同步接口–需求分析
第2节 中间表设计
第3节 基础环境搭建
第4节 生产者代码实现
第5节 消费者编码实现
第12章 课程总结
第1节 课程总结
第2节 高级工程师到架构师-解决问题思路+学习方法