H 第10章Java的线程处 第10章Java的线程处理 10.1线程的基本概念 10.2线程的属性 10.3线程组 10.4多线程程序的开发 Bac ck<
第10章 Java的线程处理 第10章 Java的线程处理 10.1 线程的基本概念 10.2 线程的属性 10.3 线程组 10.4 多线程程序的开发
H 第10章Java的线程处 10.1线程的基本概念 我们已经对多任务非常熟悉, Windows和 Linux都 是多任务的操作系统。这些操作系统可以同时运行两 个或两个以上的程序,并且看起来这些程序似乎在同 时运行。当然,除非你的计算机拥有多个处理器,否 则这些程序是不可能同时运行的。操作系统负责把系 统资源分配给这些运行中的程序,并让人感觉它们是 并发活动的。图10.1显示了支持多任务的操作系统和不 支持多任务的操作系统运行程序的情况
第10章 Java的线程处理 10.1 线程的基本概念 我们已经对多任务非常熟悉,Windows和Linux都 是多任务的操作系统。这些操作系统可以同时运行两 个或两个以上的程序,并且看起来这些程序似乎在同 时运行。当然,除非你的计算机拥有多个处理器,否 则这些程序是不可能同时运行的。操作系统负责把系 统资源分配给这些运行中的程序,并让人感觉它们是 并发活动的。图10.1显示了支持多任务的操作系统和不 支持多任务的操作系统运行程序的情况
H 第10章Java的线程处 Process 支持多任务的系统 Process Process 时间 Process 不支持多任务的系统 Process Process 时间 图10.1
第10章 Java的线程处理 图 10.1 Process Process Process 时 间 支 持 多 任 务 的 系 统 Process Process Process 时 间 不 支 持 多 任 务 的 系 统
H 第10章Java的线程处 实现多任务通常有两种方法,一种称为抢占式多 任务( preemptive multitasking);一种叫合作式多任务 ( cooperative multitasking)。对于抢占式多任务,操作系 统自行决定何时中断一个程序,将执行时间分给其他 程序。相反,对于合作式多任务操作系统将与程序进 行协商,只有程序自愿放弃控制时才被中断。虽然抢 占式多任务实现起来困难一些,但却有效得多。对于 合作式多任务来说,一个运行不好的程序会占有整个 系统
第10章 Java的线程处理 实现多任务通常有两种方法,一种称为抢占式多 任务(preemptive multitasking);一种叫合作式多任务 (cooperative multitasking)。对于抢占式多任务,操作系 统自行决定何时中断一个程序,将执行时间分给其他 程序。相反,对于合作式多任务操作系统将与程序进 行协商,只有程序自愿放弃控制时才被中断。虽然抢 占式多任务实现起来困难一些,但却有效得多。对于 合作式多任务来说,一个运行不好的程序会占有整个 系统
H 第10章Java的线程处 多线程把操作系统的多任务原理应用到程序中 进一步发展了这一原理。应用了多线程技术的程序如 同多任务操作系统一样,可以同时执行多个任务。每 个任务被称为一个线程——它是线程控制流的简称 实际上,多线程的应用非常广泛,例如,浏览器在下 载数据的同时还可以浏览其他网页,或者当某个网页 下载太慢时,还可以控制浏览器中止这个网页浏览 Java语言本身也使用一个线程在后台收集无用的内存 单元——这样就减少了用户管理内存的麻烦!
第10章 Java的线程处理 多线程把操作系统的多任务原理应用到程序中, 进一步发展了这一原理。应用了多线程技术的程序如 同多任务操作系统一样,可以同时执行多个任务。每 个任务被称为一个线程——它是线程控制流的简称。 实际上,多线程的应用非常广泛,例如,浏览器在下 载数据的同时还可以浏览其他网页,或者当某个网页 下载太慢时,还可以控制浏览器中止这个网页浏览。 Java语言本身也使用一个线程在后台收集无用的内存 单元——这样就减少了用户管理内存的麻烦!
H 第10章Java的线程处 通常,我们把操作系统的多个任务称为进程 ( Process,而程序中的多任务则称为线程。那么,线程 和进程之间有什么区别呢?最基本的区别就是每个进 程都拥有一组完整的属于自己的变量,而线程则共享 这些数据。看起来这样似乎不如进程安全,确实如此, 本章后面将会更详细地讨论。但线程的优势在于创建 和注销线程的开销比运行新的进程少得多,所以现在 主流的操作系统都支持多线程。而且,和进程间的通 信相比,线程间的通信要快得多,也方便得多
第10章 Java的线程处理 通常,我们把操作系统的多个任务称为进程 (Process),而程序中的多任务则称为线程。那么,线程 和进程之间有什么区别呢?最基本的区别就是每个进 程都拥有一组完整的属于自己的变量,而线程则共享 这些数据。看起来这样似乎不如进程安全,确实如此, 本章后面将会更详细地讨论。但线程的优势在于创建 和注销线程的开销比运行新的进程少得多,所以现在 主流的操作系统都支持多线程。而且,和进程间的通 信相比,线程间的通信要快得多,也方便得多
A第10章Java的线程处理 10.1.1线程 不少程序语言都提供对线程的支持,同这些语言 相比,Java的特点是从最底层开始就对线程提供支持。 除此以外,标准的Java类是可重载的,它允许在一个 给定的应用程序中由多个线程调用同一方法,而线程 彼此之间又互不干扰。Java的这些特点为多线程应用 程序的设计奠定了基础 究竟什么是线程呢?正如图102中所示,一个线程 是给定的指令的序列(你所编写的代码)、一个栈(在给 定的方法中定义的变量),以及一些共享数据(类一级的 变量)。线程也可以从全局类中访问静态数据
第10章 Java的线程处理 10.1.1 线程 不少程序语言都提供对线程的支持,同这些语言 相比,Java的特点是从最底层开始就对线程提供支持。 除此以外,标准的Java类是可重载的,它允许在一个 给定的应用程序中由多个线程调用同一方法,而线程 彼此之间又互不干扰。Java的这些特点为多线程应用 程序的设计奠定了基础。 究竟什么是线程呢?正如图10.2中所示,一个线程 是给定的指令的序列 (你所编写的代码)、一个栈(在给 定的方法中定义的变量),以及一些共享数据(类一级的 变量)。线程也可以从全局类中访问静态数据
H 第10章Java的线程处 Java virtual machine Applet or Application Thread a Prog. c ntr Local stack Thread B Global Prog. c nir Local stack Thread N Prog. Cnt Local stack 图102
第10章 Java的线程处理 图 10.2 Java Virtual Machine Applet or Application Global Data Thread A Prog. Cntr. Local Stack Thread B Prog. Cntr. Local Stack Thread N Prog. Cntr. Local Stack …
H 第10章Java的线程处 每个线程都有其自己的堆栈和程序计数器(PC)。用 户可以把程序计数器(PC)设想为用于跟踪线程正在执 行的指令,而堆栈用于跟踪线程的上下文(上下文是当 线程执行到某处时,当前的局部变量的值)。虽然用户 可以编写出在线程之间传送数据的子程序,但在正常 凊况下,一个线程不能访问另外一个线程的栈变量
第10章 Java的线程处理 每个线程都有其自己的堆栈和程序计数器(PC)。用 户可以把程序计数器(PC)设想为用于跟踪线程正在执 行的指令,而堆栈用于跟踪线程的上下文(上下文是当 线程执行到某处时,当前的局部变量的值)。虽然用户 可以编写出在线程之间传送数据的子程序,但在正常 情况下,一个线程不能访问另外一个线程的栈变量
H 第10章Java的线程处 个线程或执行上下文由三个主要部分组成: ①一个虚拟处理机 ②CPU执行的代码 ③代码操作的数据 代码可以或不可以由多个线程共享,这和数据是 独立的。两个线程如果执行同一个类的实例代码,则 它们可以共享相同的代码
第10章 Java的线程处理 一个线程或执行上下文由三个主要部分组成: ① 一个虚拟处理机 ② CPU执行的代码 ③ 代码操作的数据 代码可以或不可以由多个线程共享,这和数据是 独立的。两个线程如果执行同一个类的实例代码,则 它们可以共享相同的代码