第10章多线程 线程( thread)是指程序中完成一个任务的从头到 尾的执行线索。到现在为止,前面所涉及的程序都 是单线程运行的。但现实世界中的很多过程其实具 备多条线索同时执行的特点。如 Internet上的服务 器可能需要同时响应多个客户机的请求。 多线程是指同时存在几个执行体,按几条不同的执 行线索共同工作的情况。Java语言允许在一个程序 中并发地运行多个线程,使得编程人员可以很方便 地开发具有多线程功能、能同时处理多个任务的功 能强大的应用程序。虽然说线程是同步执行的,但 在实际的情况是单处理器的计算机在任何给定的时 刻只能执行多个线程中的一个。 多线程可以使程序反应更快、交互性更强,并能提 高执行效率
第10章 多线程 线程(thread)是指程序中完成一个任务的从头到 尾的执行线索。到现在为止,前面所涉及的程序都 是单线程运行的。但现实世界中的很多过程其实具 备多条线索同时执行的特点。如Internet上的服务 器可能需要同时响应多个客户机的请求。 多线程是指同时存在几个执行体,按几条不同的执 行线索共同工作的情况。Java语言允许在一个程序 中并发地运行多个线程,使得编程人员可以很方便 地开发具有多线程功能、能同时处理多个任务的功 能强大的应用程序。虽然说线程是同步执行的,但 在实际的情况是单处理器的计算机在任何给定的时 刻只能执行多个线程中的一个。 多线程可以使程序反应更快、交互性更强,并能提 高执行效率
第10章多线程 ■Java中的线程 ■线程的生命周期 ■线程的优先级和调度管理 ■扩展 Thread类创建线程 ■ Runnable接口 ■常用方法 ■线程同步 ■线程组
第10章 多线程 ◼Java中的线程 ◼线程的生命周期 ◼线程的优先级和调度管理 ◼扩展Thread类创建线程 ◼Runnable接口 ◼常用方法 ◼线程同步 ◼线程组
101]ava中的线程 ■并发现象在现实生活中大量存在 人体(消化、运动) ■计算机(同时运行多中程序) ■多线程—在一个程序中实现并发 ■编程语言一般提供了串行程序设计的方法 ■计算机的并发能力由操作系统提供 Java在语言级提供多线程并发的概念
◼ 并发现象在现实生活中大量存在 ◼ 人体(消化、运动) ◼ 计算机(同时运行多中程序) ◼ 多线程——在一个程序中实现并发 ◼ 编程语言一般提供了串行程序设计的方法 ◼ 计算机的并发能力由操作系统提供 ◼ Java在语言级提供多线程并发的概念 10.1 Java中的线程
101]ava中的线程 以前所编写的程序,每个程序都有一个入口、一个出口以 及一个顺序执行的序列,在程序执行过程中的任何指定时刻, 都只有一个单独的执行点 事实上,在单个程序内部是可以在同一时刻进行多种运算 的,这就是所谓的多线程(这与多任务的概念有相似之处)。 个单独的线程和顺序程序相似,也有一个入口、一个出 口以及一个顺序执行的序列,从概念上说,一个线程是一个 程序内部的一个顺序控制流。 线程并不是程序,它自己本身并不能运行,必须在程序中 运行。在一个程序中可以实现多个线程,这些线程同时运行, 完成不同的功能
以前所编写的程序,每个程序都有一个入口、一个出口以 及一个顺序执行的序列,在程序执行过程中的任何指定时刻, 都只有一个单独的执行点。 事实上,在单个程序内部是可以在同一时刻进行多种运算 的,这就是所谓的多线程(这与多任务的概念有相似之处)。 一个单独的线程和顺序程序相似,也有一个入口、一个出 口以及一个顺序执行的序列,从概念上说,一个线程是一个 程序内部的一个顺序控制流。 线程并不是程序,它自己本身并不能运行,必须在程序中 运行。在一个程序中可以实现多个线程,这些线程同时运行, 完成不同的功能。 将军令 多线程 10.1 Java中的线程
101]ava中的线程 从逻辑的观点来看,多线程意味着一个程序的多行语句同 时执行,但是多线程并不等于多次启动一个程序,操作系统 也不会把每个线程当作独立的进程来对待: 两者的粒度不同,是两个不同层次上的概念。进程是由 操作系统来管理的,而线程则是在一个程序(进程)内。 不同进程的代码、内部数据和状态都是完全独立的,而 个程序内的多线程是共享同一块内存空间和同一组系统 资源,有可能互相影响 线程本身的数据通常只有寄存器数据,以及一个程序执 行时使用的堆栈,所以线程的切换比进程切换的负担要小
从逻辑的观点来看,多线程意味着一个程序的多行语句同 时执行,但是多线程并不等于多次启动一个程序,操作系统 也不会把每个线程当作独立的进程来对待: 两者的粒度不同,是两个不同层次上的概念。进程是由 操作系统来管理的,而线程则是在一个程序(进程)内。 不同进程的代码、内部数据和状态都是完全独立的,而 一个程序内的多线程是共享同一块内存空间和同一组系统 资源,有可能互相影响。 线程本身的数据通常只有寄存器数据,以及一个程序执 行时使用的堆栈,所以线程的切换比进程切换的负担要小。 10.1 Java中的线程
101]ava中的线程 ■进程:程序的一次执行 ■程序代码 程序数据 程序资源 线程:进程中程序代码的一个执行序列。 程序调用堆栈 ■线程局部变量 ■可共享访问进程中的数据和资源 操作系统按线程来调度程序的执行
◼ 进程:程序的一次执行。 ◼ 程序代码 ◼ 程序数据 ◼ 程序资源 ◼ 线程:进程中程序代码的一个执行序列。 ◼ 程序调用堆栈 ◼ 线程局部变量 ◼ 可共享访问进程中的数据和资源 ◼ 操作系统按线程来调度程序的执行 10.1 Java中的线程
101]ava中的线程 文件各种系统资源输入输出装置 文件各种系统资源输入输出装置 数据区段三 数据区段 程序区段 程序区段 只有一个地方在执行 同时有数个地方在执行 传统的进程 多线程的任务
文件 各种系统资源 输入输出装置 数据区段 程序区段 只有一个地方在执行 文件 各种系统资源 输入输出装置 数据区段 程序区段 同时有数个地方在执行 传统的进程 多线程的任务 10.1 Java中的线程
101]ava中的线程 多线程的优势: 多线程编程简单,效率高(能直接共享数据和资源,多进程不能) ■适合于开发服务程序(如Web服务,聊天服务等) ■适合于开发有多种交互接口的程序(如聊天程序的客户端,网络下 载工具) 适合于有人机交互又有计算量的程序(如字处理程序Word, Excel) 减轻编写交互频繁、涉及面多的程序的困难(如监听网络端口) 程序的吞吐量会得到改善(同时监听多种设备,如网络端口、串口、并口 以及其他外设) 有多个处理器的系统,可以并发运行不同的线程(否则,任何时刻只有 一个线程在运行)
多线程的优势: ◼ 多线程编程简单,效率高(能直接共享数据和资源,多进程不能) ◼ 适合于开发服务程序(如Web服务,聊天服务等) ◼ 适合于开发有多种交互接口的程序(如聊天程序的客户端,网络下 载工具) ◼ 适合于有人机交互又有计算量的程序(如字处理程序Word,Excel) 减轻编写交互频繁、涉及面多的程序的困难(如监听网络端口) 程序的吞吐量会得到改善(同时监听多种设备,如网络端口、串口、并口 以及其他外设) 有多个处理器的系统,可以并发运行不同的线程(否则,任何时刻只有 一个线程在运行) 10.1 Java中的线程
101]ava中的线程 虽然各种操作系统(Unix/ Linux、 Windows系列等)都 支持多线程,但若要用C、C++或其他语言编写多线程程序 是十分困难的,因为它们对数据同步的支持不充分。 对多线程的综合支持是Java语言的一个重要特色,它提 供了 Thread类来实现多线程。在Java中,线程可以认为是由 三部分组成的: 虚拟CPU,封裝在 java. langThread类中,它控制着整 个线程的运行; 执行的代码,传递给 Thread类,由 Thread类控制顺序 执行; 处理的数据,传递给 Thread类,是在代码执行过程中 所要处理的数据
虽然各种操作系统(Unix/Linux、Windows系列等)都 支持多线程,但若要用C、C++或其他语言编写多线程程序 是十分困难的,因为它们对数据同步的支持不充分。 对多线程的综合支持是Java语言的一个重要特色,它提 供了Thread类来实现多线程。在Java中,线程可以认为是由 三部分组成的: ▪ 虚拟CPU,封装在java.lang.Thread类中,它控制着整 个线程的运行; ▪ 执行的代码,传递给Thread类,由Thread类控制顺序 执行; ▪ 处理的数据,传递给Thread类,是在代码执行过程中 所要处理的数据。 10.1 Java中的线程