编程红宝书(珍藏版) ava 完金自学手册 第9章多线程编程 多线程是Java程序设计语言的一个亮点,它使用户可以很方便地 编写多线程程序,虽然编写多线程代码需要考虑诸如安全、死锁、 资源共享的问题,但是总体上讲Java在编写多线程程序上比其他 语言都要简洁 使用多线程最直接的例子是具有用户界面的程序。如果用户界面 上设计了一个按钮,一旦单击该按钮程序会自动在网络上搜索指 定数据,当然这个过程会持续一段时间。如果没有多线程实现技 术,就会出现用户界面无法控制的局面,即在网络数据搜索完之 前,用户界面根本不响应其他界面输入。整个界面象是静止在那 里而无法操作。而我们希望不管系统当前在完成什么任务,都允 许用户操作界面元素,如査询数据,完成其他信息的处理等。这 样就要求程序可以同时执行多个任务,响应用户的不同操作请求 对于用户而言就仿佛有多个处理器在为其工作。而在单处理器的 计算机上完成程序的多任务功能就需要多线程技术 多线程技术可以模拟多处理器的效果,对用户而言计算机同时完 成一个程序的多个任务,而实际上该机制使得计算机把CPU周期按 照一定策略分配给每一个线程,而高速的CP使得用户觉得计算机 在同时完成多个任务。 Q 机械工业出版社 China Machine Press
第9章 多线程编程 • 多线程是Java程序设计语言的一个亮点,它使用户可以很方便地 编写多线程程序,虽然编写多线程代码需要考虑诸如安全、死锁、 资源共享的问题,但是总体上讲Java在编写多线程程序上比其他 语言都要简洁。 • 使用多线程最直接的例子是具有用户界面的程序。如果用户界面 上设计了一个按钮,一旦单击该按钮程序会自动在网络上搜索指 定数据,当然这个过程会持续一段时间。如果没有多线程实现技 术,就会出现用户界面无法控制的局面,即在网络数据搜索完之 前,用户界面根本不响应其他界面输入。整个界面象是静止在那 里而无法操作。而我们希望不管系统当前在完成什么任务,都允 许用户操作界面元素,如查询数据,完成其他信息的处理等。这 样就要求程序可以同时执行多个任务,响应用户的不同操作请求。 对于用户而言就仿佛有多个处理器在为其工作。而在单处理器的 计算机上完成程序的多任务功能就需要多线程技术。 • 多线程技术可以模拟多处理器的效果,对用户而言计算机同时完 成一个程序的多个任务,而实际上该机制使得计算机把CPU周期按 照一定策略分配给每一个线程,而高速的CPU使得用户觉得计算机 在同时完成多个任务
编程红宝书(珍藏版) ava 完金自学手册 9.1线程概述 ·线程是操作系统的概念,线程也称之为轻量级进程 ( lightweight process LWP),是CPU的基本使用单元, 它的轻量级名称是和进程相关的。线程由线程ID、程序记 数器、寄存器和堆栈组成,多个线程可以共享代码段、数 据段和诸如打开的文件等的系统资源。而传统的进程其实 就是单线程控制程序,每个进程都有自己的代码段、数据 段和其他系统资源。这无疑使得每个进程管理更多的内容, 从而称为重量级进程。“轻量”是指线程没有独自的存储 空间,和同一个进程的多个线程共享存储空间 多线程和传统的单线程在程序设计上的最大区别是每个线 程独自运行,是彼此独立的指令流,造成线程之间的执行 是乱序的,所以线程的控制需要谨慎对待 下面分别详细介绍进程和线程的概念,如何创建线程、设 置线程的优先级、线程控制和线程同步等关键问 G想撼玩出
9.1 线程概述 • 线程是操作系统的概念,线程也称之为轻量级进程 (lightweight process LWP),是CPU的基本使用单元, 它的轻量级名称是和进程相关的。线程由线程ID、程序记 数器、寄存器和堆栈组成,多个线程可以共享代码段、数 据段和诸如打开的文件等的系统资源。而传统的进程其实 就是单线程控制程序,每个进程都有自己的代码段、数据 段和其他系统资源。这无疑使得每个进程管理更多的内容, 从而称为重量级进程。“轻量”是指线程没有独自的存储 空间,和同一个进程的多个线程共享存储空间。 • 多线程和传统的单线程在程序设计上的最大区别是每个线 程独自运行,是彼此独立的指令流,造成线程之间的执行 是乱序的,所以线程的控制需要谨慎对待。 • 下面分别详细介绍进程和线程的概念,如何创建线程、设 置线程的优先级、线程控制和线程同步等关键问题
编程红宝书(珍藏版) ava 完金自学手册 9.2创建线程 在学习线程前,一定要先了解Java的线程机制, 然后学习如何利用 Thread类实现多线程。Java的 多线程机制提供了两种方式实现多线程编程, 种是通过继java.long. Thread类来实现,一种 是通过实现 Runnable接口实现 Q想桃工业出隙社
9.2 创建线程 • 在学习线程前,一定要先了解Java的线程机制, 然后学习如何利用Thread类实现多线程。Java的 多线程机制提供了两种方式实现多线程编程,一 种是通过继承java.long.Thread类来实现,一种 是通过实现Runnable接口实现
编程红宝书(珍藏版) ava 完金自学手册 9.2.1继承 Thread类创建线程 Thread类是Java实现多线程的提供了简单的方法, Thread类已经具备了运 行多线程所需要的资源,用户只需要重载该类的run(方法,把需要使用 多线程运行的代码放入该方法。这样这些代码就可以和其他线程“同时” 存在。创建线程对象并用该对象调用 start(方法则线程开始运行, start(方法提供了启动线程和线程运行所需要的框架。 代码是一个例子,说明使用继承 Thread类实现多线程。每次new一个线程 都设置一个线程计数器,表明建立的线程数。整个程序启动3个线程,每 个线程会有9次输出,但是三个线程的建立并非顺序执行,而每个线程的9 次输出也不一定会顺序输出。如代码继承 Thread类实现多线程示例所示 Q想桃工业出隙社 继承Tad实现多线程程字执行结果
9.2.1 继承Thread类创建线程 • Thread类是Java实现多线程的提供了简单的方法,Thread类已经具备了运 行多线程所需要的资源,用户只需要重载该类的run()方法,把需要使用 多线程运行的代码放入该方法。这样这些代码就可以和其他线程“同时” 存在。创建线程对象并用该对象调用start()方法则线程开始运行, start()方法提供了启动线程和线程运行所需要的框架。 • 代码是一个例子,说明使用继承Thread类实现多线程。每次new一个线程 都设置一个线程计数器,表明建立的线程数。整个程序启动3个线程,每 个线程会有9次输出,但是三个线程的建立并非顺序执行,而每个线程的9 次输出也不一定会顺序输出。如代码继承Thread类实现多线程示例所示
编程红宝书(珍藏版) ava 完金自学手册 9.2.2实现 Runnable接口创建线程 ·Java提供了另一个有用的接口实现多线程编程。因为Java 不支持多继承,所以如果用户的类已经继承了一个类,而 又需要多线程机制的支持,此时继承 thread类就不现实了。 所以 Runnable接口在这种情况下就很实用 Runnable接口有唯一一个方法 run o,所以实现该接口时必 须自己定义该方法,提供多线程需要执行的代码。如果运 行通过实现 Runnable接口的多线程程序,则需要借助 Thread类,因为 Runnable接口没有提供任何东西支持多线 程,必须借助 Thead类的框架实现多线程,即通过类 Thread 的构造函数 public thread( Runnable target)来实现。代 码是通过继承 Runnable接口而实现多线程的例子。我们分 析和运行该程序,观察输岀结果就可以很好的理解其运用 Q想桃工业出隙社
9.2.2 实现Runnable接口创建线程 • Java提供了另一个有用的接口实现多线程编程。因为Java 不支持多继承,所以如果用户的类已经继承了一个类,而 又需要多线程机制的支持,此时继承thread类就不现实了。 所以Runnable接口在这种情况下就很实用。 • Runnable接口有唯一一个方法run(),所以实现该接口时必 须自己定义该方法,提供多线程需要执行的代码。如果运 行通过实现Runnable接口的多线程程序,则需要借助 Thread类,因为Runnable接口没有提供任何东西支持多线 程,必须借助Thead类的框架实现多线程,即通过类Thread 的构造函数public Thread(Runnable target)来实现。代 码是通过继承Runnable接口而实现多线程的例子。我们分 析和运行该程序,观察输出结果就可以很好的理解其运用