乐趣区

关于java:站在巨人的肩膀上学习五位阿里大牛联手撰写的深入浅出-Java-多线程

写在后面

多线程绝对于其余 Java 知识点来讲,有肯定的学习门槛,并且理解起来比拟吃力。在平时工作中如若使用不当会呈现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以把握理解多线程至关重要。

笔者在读完市面上对于 Java 并发编程的材料后,感觉有些知识点不是很清晰,于是在 RedSpider 社区内开展了对 Java 并发编程原理的探讨。鉴于开源精力,咱们决定将咱们探讨之后的 Java 并发编程原理整顿成书籍,分享给大家。

站在伟人的肩上,咱们能够看得更远。本书内容的次要起源有博客、书籍、论文,对于一些曾经叙述得很清晰的知识点咱们间接援用在本书中; 对于一些没有解说分明的知识点,咱们加以画图或者编写 Demo 进行加工; 而对于一些不置可否的知识点,本书在查阅了大量材料的状况下,给出最正当的解释。

写本书的过程也是对本人钻研和把握的技术点进行整顿的过程,心愿本书能帮忙读者疾速把握并发编程技术。

内容简介

如需原件下载,请点击

第 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

第 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 只能保障一个共享变量的原子操作

第 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

第 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 总结

退出移动版