一.基础API分析
Thread源码分析
Runable源码分析
二.常见多线程基础问题
- 基本概念扫盲
什么是线程?
线程与进程有哪些区别?
什么是多线程?什么是多进程?
Java中多线程基本概念? - Java中如何使用线程有哪些方式?(继承Thread或者实现Runable)
- 线程的状态有哪些?
- 后台线程和非后台线程有什么区别?
- 如何手写一个高性能的线程池?
三.常见多线程线上问题
- JAVA应用占用cpu过高原因分析:
https://blog.csdn.net/chaizepeng/article/details/84856507 - 线程死锁如何定位?
jstack可以直接找到锁住的资源和等待该锁的线程 - 使用arthas如何定位?
- 数据库死锁复现和分析?
- 同步块阻塞和网络IO过高
附录:线上诊断工具使用
参考: https://arthas.aliyun.com/doc/quick-start.html#demo
Arthas实现原理: 使用代理方式-javaagent
https://zhuanlan.zhihu.com/p/115127052