第16章 多线程
第16章 多线程
本章要点
- 线程的基础知识
- 理解线程和进程的区别与联系
- 三种创建线程的方式
- 线程的
run()
方法和start
方法的区别与联系 - 线程的生命周期
- 线程死亡的几种情况
- 控制线程的常用方法
- 线程同步的概念和必要性
- 使用
synchronized
控制线程同步 - 使用
Lock
对象控制线程同步 - 使用
Object
提供的方法实现线程通信 - 使用条件变量实现线程通信
- 使用阻塞队列实现线程通信
- 线程组的功能和用法
- 线程池的功能和用法
Java8
增强的ForkJoinPool
ThreadLocal
类的功能和用法- 使用线程安全的集合类
Java9
新增的发布-订阅框架
前面大部分程序,都只是在做单线程的编程,前面所有程序(除第11章、第12章的程序之外,它们有内建的多线程支持)都只有一条顺序执行流——程序从main()
方法开始执行,依次向下执行每行代码,如果程序执行某行代码时遇到了阻塞,则程序将会停滞在该处。如果使用IDE工具的单步调试功能,就可以非常清楚地看出这一点
但实际的情况是,单线程的程序往往功能非常有限,例如开发一个简单的服务器程序,这个服务器程序需要向不同的客户端提供服务时,不同的客户端之间应该互不干扰,否则会让客户端感觉非常沮丧。
多线程听上去是非常专业的概念,其实非常简单:
- 单线程的程序(前面介绍的绝大部分程序)只有一个顺序执行流,
- 多线程的程序则可以包括多个顺序执行流,多个顺序流之间互不干扰。
可以这样理解:
- 单线程的程序如同只雇佣一个服务员的餐厅,他必须做完一件事情后才可以做下一件事情;
- 多线程的程序则如同雇佣多个服务员的餐厅,他们可以同时做多件事情
Java
语言提供了非常优秀的多线程支持,程序可以通过非常简单的方式来启动多线程。
本章将会详细介绍Java
多线程编程的相关方面,包括创建、启动线程、控制线程,以及多线程的同步操作,并会介绍如何利用Java
内建支持的线程池来提高多线程性能。