阿里团队大牛就是多,整理的【多线程笔记】火了,限时免费公开。

写在前面

多线程相对于其他 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 只能保证一个共享变量的原子操作

点赞+关注,然后看文末即可免费领取这本五位阿里大牛整理出的《深入浅出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

 

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

 

点赞+关注,然后添加↓↓↓即可免费领取这本五位阿里大牛整理出的《深入浅出Java多线程》文档资料。

全部评论

相关推荐

头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器->这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题->后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
明天不下雨了:这个项目 这个简历 这个模板 莫不是一个开源的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务