2005年左右民用的多核CPU正式进入市场,标志着一个新时代来临了。双核和多核处理器设计用于在一枚处理器中集成两个或多个完整执行内核,以支持同时执行并管理多个任务。以前的单核CPU相当于一个人工作,它有很多任务,并很快地在任务之间切换工作,给人们造成的感觉好像是同时在执行,例如我上了一个聊天软件,我又在打游戏,感觉好像在同时执行,实际上单核CPU只是很快速地在各个任务之间切换工作,而多核心CPU相当于有多个人在同时工作,这才是真正意义上的多核心同时工作,当然它们也会在各个任务之间切换调度。
Java的多线程Thread核心类早在JDK 1.0就已经有了,从一开始就确立了Java最基础的线程模型,并且这样的线程模型在后续的修补中,并未发生实质上的变更,可以说是一个具有传承性的良好设计。
随着多核CPU的到来,在2004年发布的JDK 1.5中加入了Executors线程池、Callable、Future异步任务支持、Lock锁、concurrent并发包下的大量工具类,标志着Java多线程的时代来临了。
本书特点
本书以JDK 17长期维护版本为示例,详细地介绍了与Java多线程并发相关的知识体系,让读者不仅知其然,而且知其所以然。本书对多线程相关的理论分门别类、层层递进地进行详细叙述和透彻分析,既体现了各知识点之间的联系,又兼顾了其渐进性。本书在介绍每个知识点时都给出了该知识点的应用场景,同时配合代码演示,让读者更能明白其实现原理、使用方式。本书丰富的免费配套资源包括源代码、笔记、完整的配套视频。
本书主要内容
第1章介绍了Thread线程对象的创建方式、启动方式、常用方法、优先级、守护线程。
第2章介绍了ThreadGroup线程组的概念、线程对象构造器、线程类常用方法、线程对象异常捕获、等待线程对象销毁、线程对象的优雅关闭。
第3章介绍了线程之间的协作,synchronized对象锁、线程死锁的产生、Object对象监视器、线程阻塞等待机制、线程唤醒机制、线程可见性、重排序、线程生命周期状态。
第4章介绍了ThreadLocal线程局部变量的使用、实现机制的核心概念、Reference弱引用。
第5章介绍了Lock锁接口的相关规范,以及ReentrantLock、Condition、ReentrantReadWriteLock。
第6章介绍了atomic原子包、AtomicBoolean、AtomicInteger、AtomicReference、AtomicIntegerFieldUpdater、AtomicIntegerArray、LongAdder。
第7章介绍了BlockingQueue接口的相关规范,及其核心实现类ArrayBlockingQueue、LinkedBlockingQueue、LinkedTransferQueue、SynchronousQueue、PriorityBlockingQueue、DelayQueue。
第8章介绍了ThreadPoolExecutor线程池整个链路的串联、ThreadPoolExecutor线程池的使用,源码分析其核心概念、FutureTask的核心概念、AbstractExecutorService的使用、ScheduledThreadPoolExecutor定时器的使用,源码分析其核心概念。
第9章介绍了线程同步器的使用、CountDownLatch、CyclicBarrier、Semaphore、Phaser。
第10章介绍了AbstractQueuedSynchronizer框架,详细分析了其源码,利用官方文档示例实现自己的同步锁、同步器。
读者对象
所有对Java多线程感兴趣的软件开发人员。
资源下载提示
素材(源码)等资源: 扫描目录上方的二维码下载。
视频等资源: 扫描封底的文泉云盘防盗码,再扫描书中相应章节中的二维码,可以在线学习。
致谢
特别感谢清华大学出版社的赵佳霓编辑。感谢她对本书专业且高效的审阅及对本书提出的建设性意见,有效推动了本书的出版。同时也感谢参与本书出版的所有人员,在大家的辛勤努力下,才有了本书的顺利出版。
刘宁萌2023年2月
第1章多线程基础(54min)
1.1多线程带来的好处和问题
1.1.1多线程带来的好处
1.1.2多线程带来的问题
1.2进程和线程
1.3线程创建方式
1.4线程启动方式
1.5线程的概念及常用方法
1.5.1线程状态
1.5.2常用方法
1.6线程的优先级
1.7守护线程
小结
习题
第2章多线程进阶(149min)
2.1ThreadGroup类线程组
2.1.1构造器
2.1.2常用方法
2.2Thread线程对象构造器
2.2.1stackSize(栈大小)
2.2.2共享线程局部变量
2.3Thread类常用方法
2.4Thread线程对象异常捕获
2.4.1线程对象自己的异常捕获器
2.4.2所属线程组对象异常捕获器
2.4.3Thread类全局异常捕获器
2.5等待线程对象销毁
2.6线程对象优雅关闭
2.6.1中断相关方法
2.6.2官方响应中断的方法
小结
习题
第3章多线程特性(132min)
3.1引出synchronized对象锁
3.2synchronized对象锁
3.2.1标准对象
3.2.2class对象
3.2.3锁特性
3.3线程死锁的产生
3.3.1JConsole
3.3.2jstack
3.4对象监视器
3.4.1wait()
3.4.2wait(long timeoutMillis)
3.4.3notify()
3.4.4notifyAll()
3.5线程的可见性和重排序
3.5.1可见性
3.5.2重排序
3.6线程生命周期状态
3.6.1NEW
3.6.2RUNNABLE
3.6.3BLOCKED
3.6.4WAITING
3.6.5TIMED_WAITING
3.6.6TERMINATED
小结
习题
第4章ThreadLocal线程局部变量(104min)
4.1在方法链路中传递数据
4.2引出线程局部变量
4.3线程局部变量核心概念
4.3.1Thread对象数据保存点
4.3.2线程局部变量操作入口
4.3.3线程局部变量数据操作功能
4.3.4弱引用介绍
小结
习题
第5章Lock锁(104min)
5.1Lock接口
5.2ReentrantLock
5.2.1构造器
5.2.2常用方法
5.2.3公平锁或非公平锁
5.2.4自旋锁
5.3Condition
5.4ReentrantReadWriteLock
5.4.1构造器
5.4.2共享锁和互斥锁
5.4.3重入特性
5.4.4常用方法
小结
习题
第6章atomic原子包(117min)
6.1AtomicBoolean
6.1.1构造器
6.1.2常用方法
6.2AtomicInteger
6.2.1构造器
6.2.2常用方法
6.3AtomicReference
6.3.1构造器
6.3.2常用方法
6.4AtomicIntegerFieldUpdater
6.4.1对象创建
6.4.2常用方法
6.5AtomicIntegerArray
6.5.1构造器
6.5.2常用方法
6.6LongAdder
6.6.1实现方式
6.6.2常用方法
小结
习题
第7章阻塞队列(216min)
7.1ArrayBlockingQueue
7.1.1构造器
7.1.2常用方法
7.2LinkedBlockingQueue
7.2.1构造器
7.2.2常用方法
7.3LinkedTransferQueue
7.3.1构造器
7.3.2常用方法
7.4SynchronousQueue
7.4.1构造器
7.4.2常用方法
7.5DelayQueue
7.5.1构造器
7.5.2常用方法
7.6PriorityBlockingQueue
7.6.1构造器
7.6.2常用方法
小结
习题
第8章线程池(248min)
8.1ThreadPoolExecutor
8.1.1构造器
8.1.2常用方法
8.2FutureTask
8.2.1构造器
8.2.2常用方法
8.3AbstractExecutorService
8.3.1构造器
8.3.2常用方法
8.4ScheduledThreadPoolExecutor
8.4.1构造器
8.4.2常用方法
小结
习题
第9章线程同步器(152min)
9.1CountDownLatch
9.1.1构造器
9.1.2常用方法
9.2CyclicBarrier
9.2.1构造器
9.2.2常用方法
9.3Semaphore
9.3.1构造器
9.3.2常用方法
9.4Phaser
9.4.1构造器
9.4.2常用方法
小结
习题
第10章AQS源码分析
10.1构造器
10.2常用方法
10.3ConditionObject
小结