站在巨人的肩膀上学习:五位阿里大牛联手撰写的《深入浅出 Java 多线程》
写在前面
多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。
笔者在读完市面上关于 Java 并发编程的资料后,感觉有些知识点不是很清晰,于是在 RedSpider 社区内展开了对 Java 并发编程原理的讨论。鉴于开源精神,我们决定将我们讨论之后的 Java 并发编程原理整理成书籍,分享给大家。
站在巨人的肩上,我们可以看得更远。本书内容的主要来源有博客、书籍、论文,对于一些已经叙述得很清晰的知识点我们直接引用在本书中;对于一些没有讲解清楚的知识点,我们加以画图或者编写 Demo 进行加工;而对于一些模棱两可的知识点,本书在查阅了大量资料的情况下,给出最合理的解释。
写本书的过程也是对自己研究和掌握的技术点进行整理的过程,希望本书能帮助读者快速掌握并发编程技术。
内容简介
转发+关注,然后一键三连+评论,然后添加 VX(tkzl6666)即可免费领取《深入浅出 Java 多线程》文档资料。
 
 第 1 章 进程与线程的基本概念
1.1 进程产生的背景
1.2 上下文切换
 
 第 2 章 Java 多线程入门类和接口
2.1 Thread 类和 Runnable 接口
- 2.1.1 继承 Thread 类 
- 2.1.2 实现 Runnable 接口 
- 2.1.3 Thread 类构造方法 
- 2.1.4 Thread 类的几个常用方法 
- 2.1.5 Thread 类与 Runnable 接口的比较 
2.2 Callable、Future 与 FutureTask
- 2.2.1 Callable 接口 
- 2.2.2 Future 接口 
- 2.2.3 FutureTask 类 
- 2.2.4 FutureTask 的几个状态 
 
 第 3 章 线程组和线程优先级
3.1 线程组(ThreadGroup)
3.2 线程的优先级
3.3 线程组的常用方法及数据结构
- 3.3.1 线程组的常用方法 
- 3.3.2 线程组的数据结构 
 
 第 4 章 Java 线程的状态及主要转化方法
4.1 操作系统中的线程状态转换
4.2 Java 线程的 6 个状态
- 4.2.1 NEW 
- 4.2.2 RUNNABLE 
- 4.2.3 BLOCKED 
- 4.2.4 WAITING 
- 4.2.5 TIMED_WAITING 
- 4.2.6 TERMINATED 
4.3 线程状态的转换
- 4.3.1 BLOCKED 与 RUNNABLE 状态的转换 
- 4.3.2 WAITING 状态与 RUNNABLE 状态的转换 
- 4.3.3 TIMED_WAITING 与 RUNNABLE 状态转换 
- 4.3.4 线程中断 
 
 第 5 章 Java 线程间的通信
5.1 锁与同步
5.2 等待/通知机制
5.3 信号量
5.4 管道
5.5 其它通信相关
- 5.5.1 join 方法 
- 5.5.2 sleep 方法 
- 5.5.3 ThreadLocal 类 
- 5.5.4 InheritableThreadLocal 
 
 转发+关注,然后一键三连+评论,然后添加 VX(tkzl6666)即可免费领取《深入浅出 Java 多线程》文档资料。
第 6 章 Java 内存模型基础知识
6.1 并发编程模型的两个关键问题
6.2 Java 内存模型的抽象结构
- 6.2.1 运⾏时内存的划分 
- 6.2.2 既然堆是共享的,为什么在堆中会有内存不可⻅问题? 
- 6.2.3 JMM 与 Java 内存区域划分的区别与联系 
 
 第 7 章 重排序与 happens-before
7.1 什么是重排序?
7.2 顺序一致性模型与 JMM 的保证
- 7.2.1 数据竞争与顺序一致性 
- 7.2.2 顺序一致性模型 
- 7.2.3 JMM 中同步程序的顺序一致性效果 
- 7.2.4 JMM 中未同步程序的顺序一致性效果 
7.3 happens-before
- 7.3.1 什么是 happens-before? 
- 7.3.2 天然的 happens-before 关系 
 
 第 8 章 volatile
8.1 几个基本概念
- 8.1.1 内存可见性 
- 8.1.2 重排序 
- 8.1.3 happens-before 规则 
8.2 volatile 的内存语义
- 8.2.1 内存可见性 
- 8.2.1 禁止重排序 
8.3 volatile 的用途
 
 第 9 章 synchronized 与锁
9.1 Synchronized 关键字
9.2 几种锁
- 9.2.1 Java 对象头 
- 9.2.2 偏向锁 
- 9.2.3 轻量级锁 
- 9.2.4 重量级锁 
- 9.2.5 总结锁的升级流程 
- 9.2.6 各种锁的优缺点对比 
 
 第 10 章 乐观锁和悲观锁
10.1 乐观锁与悲观锁的概念
10.2 CAS 的概念
10.3 Java 实现 CAS 的原理 - Unsafe 类
10.4 原子操作-AtomicInteger 类源码简析
10.5 CAS 实现原子操作的三大问题
- 10.5.1 ABA 问题 
- 10.5.2 循环时间长开销大 
- 10.5.3 只能保证一个共享变量的原子操作 
 
 转发+关注,然后一键三连+评论,然后添加 VX(tkzl6666)即可免费领取《深入浅出 Java 多线程》文档资料。
第 11 章 AQS
11.1 AQS 简介
11.2 AQS 的数据结构
11.3 资源共享模式
11.4 AQS 的主要方法源码解析
- 11.4.1 获取资源 
 
 第 12 章 线程池原理
12.1 为什么要使用线程池
12.2 线程池的原理
- 12.2.1 ThreadPoolExecutor 提供的构造方法 
- 12.2.2 ThreadPoolExecutor 的策略 
- 12.2.3 线程池主要的任务处理流程 
- 12.2.4 ThreadPoolExecutor 如何做到线程复用的? 
12.3 四种常见的线程池
- 12.3.1 newCachedThreadPool 
- 12.3.2 newFixedThreadPool 
- 12.3.3 newSingleThreadExecutor 
- 12.3.4 newScheduledThreadPool 
 
 第 13 章 阻塞队列
13.1 阻塞队列的由来
13.2 BlockingQueue 的操作方法
13.3 BlockingQueue 的实现类
- 13.3.1 ArrayBlockingQueue 
- 13.3.2 LinkedBlockingQueue 
- 13.3.3 DelayQueue 
- 13.3.4 PriorityBlockingQueue 
- 13.3.5 SynchronousQueue 
13.5 阻塞队列的原理
13.6 示例和使用场景
- 13.6.1 生产者-消费者模型 
- 13.6.2 线程池中使用阻塞队列 
 
 第 14 章 锁接口和类
14.1 synchronized 的不足之处
14.2 锁的几种分类
- 14.2.1 可重入锁和非可重入锁 
- 14.2.2 公平锁与非公平锁 
- 14.2.3 读写锁和排它锁 
14.3 JDK 中有关锁的一些接口和类
- 14.3.1 抽象类 AQS/AQLS/AOS 
- 14.3.2 接口 Condition/Lock/ReadWriteLock 
- 14.3.3 ReentrantLock 
- 14.3.4 ReentrantReadWriteLock 
- 14.3.5 StampedLock 
 
 第 15 章 并发容器集合
15.1 同步容器与并发容器
15.2 并发容器类介绍
- 15.2.1 并发 Map 
- 15.2.2 并发 Queue 
- 15.2.3 并发 Set 
 
 转发+关注,然后一键三连+评论,然后添加 VX(tkzl6666)即可免费领取《深入浅出 Java 多线程》文档资料。
第 16 章 CopyOnWrite 容器
16.1 什么是 CopyOnWrite 容器
16.2 CopyOnWriteArrayList
16.3 CopyOnWrite 的业务中实现
 
 第 17 章 通信工具类
17.1 Semaphore
- 17.1.1 Semaphore 介绍 
- 17.1.2 Semaphore 案例 
- 17.1.3 Semaphore 原理 
17.2 Exchanger
17.3 CountDownLatch
- 17.3.1 CountDownLatch 介绍 
- 17.3.2 CountDownLatch 案例 
- 17.3.3 CountDownLatch 原理 
17.4 CyclicBarrier
- 17.4.1 CyclicBarrier 介绍 
- 17.4.2 CyclicBarrier Barrier 被破坏 
- 17.4.3 CyclicBarrier 案例 
- 17.4.4 CyclicBarrier 原理 
17.5 Phaser
- 17.5.1 Phaser 介绍 
- 17.5.2 Phaser 案例 
- 17.5.3 Phaser 原理 
 
 第 18 章 Fork/Join 框架
18.1 什么是 Fork/Join
18.2 工作窃取算法
18.3 Fork/Join 的具体实现
- 18.3.1 ForkJoinTask 
- 18.3.2 ForkJoinPool 
- 18.4 Fork/Join 的使用 
 
 第 19 章 Java 8 Stream 并行计算原理
19.1 Java 8 Stream 简介
19.2 Stream 单线程串行计算
19.3 Stream 多线程并行计算
19.4 从源码看 Stream 并行计算原理
19.5 Stream 并行计算的性能提升
 
 第二十章 计划任务
20.1 使用案例
20.2 类结构
20.3 主要方法介绍
- 20.3.1 schedule 
- 20.3.2 scheduledAtFixedRate 
- 20.3.3 scheduledAtFixedDelay 
- 20.3.4 delayedExecute 
20.4 DelayedWorkQueue
- 20.4.1 take 
- 20.4.2 offer 
20.5 总结
 
 转发+关注,然后一键三连+评论,然后添加 VX(tkzl6666)即可免费领取《深入浅出 Java 多线程》文档资料。












 
    
评论 (2 条评论)