叶核亚编《JAVA程序设计实用教程》多线程_第1页
叶核亚编《JAVA程序设计实用教程》多线程_第2页
叶核亚编《JAVA程序设计实用教程》多线程_第3页
叶核亚编《JAVA程序设计实用教程》多线程_第4页
叶核亚编《JAVA程序设计实用教程》多线程_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计实用教程(第4版)第第7章章 多线程多线程 7.1 操作系统中的进程与线程操作系统中的进程与线程 7.2 Java的线程对象的线程对象 7.3 线程的同步机制线程的同步机制Java程序设计实用教程(第4版)第第7章章 多线程多线程内容和要求:内容和要求:1. 理解进程与线程概念,掌握创建、管理和控理解进程与线程概念,掌握创建、管理和控制制Java线程对象的方法。线程对象的方法。2. 了解并发执行的多线程间存在的各种关系,了解并发执行的多线程间存在的各种关系,掌握实现线程互斥和线程同步方法。掌握实现线程互斥和线程同步方法。重点:重点:创建创建Java线程对象,改变线程状态,设线程

2、对象,改变线程状态,设置线程优先级以控制线程调度。置线程优先级以控制线程调度。难点:难点:线程互斥,线程同步。线程互斥,线程同步。Java程序设计实用教程(第4版)7.1 操作系统中的进程与线程操作系统中的进程与线程n7.1.1 进程进程n7.1.2 线程线程n7.1.3 并发程序设计并发程序设计Java程序设计实用教程(第4版)7.1.1 进程进程1.进程的定义和属性进程的定义和属性进程(进程(process)是一个可并发执行的具有独立功能的程序)是一个可并发执行的具有独立功能的程序(program)关于某个数据集合的一次执行过程,也是操作系)关于某个数据集合的一次执行过程,也是操作系统进行

3、资源分配和保护的基本单位。统进行资源分配和保护的基本单位。 结构性结构性共享性共享性动态性动态性独立性独立性并发性并发性制约性制约性 1.进程的状态进程的状态就绪(就绪(ready)态)态运行(运行(running)态)态阻塞(阻塞(blocked)态)态 Java程序设计实用教程(第4版)7.1.2 线程线程1.引入线程机制的动机和思路引入线程机制的动机和思路2.线程的定义和属性线程的定义和属性线程(线程(thread)是操作系统进程中能够独立)是操作系统进程中能够独立执行的实体(控制流),是处理器调度和执行的实体(控制流),是处理器调度和分派的基本单位。分派的基本单位。 并发性并发性共享性

4、共享性动态性动态性结构性结构性Java程序设计实用教程(第4版) 3. 线程的状态线程的状态 4.线程的并发性线程的并发性5.线程调度线程调度Java程序设计实用教程(第4版)7.1.3 并发程序设计并发程序设计1.顺序程序设计顺序程序设计执行的顺序性。执行的顺序性。环境的封闭性。环境的封闭性。执行结果的确定性。执行结果的确定性。计算结果的可再现性。计算结果的可再现性。2.并发程序设计并发程序设计Java程序设计实用教程(第4版)7.2 Java的线程对象的线程对象n7.2.1 Runnable接口与接口与Thread类类n7.2.2 线程对象的优先级线程对象的优先级n7.2.3 线程对象的生

5、命周期线程对象的生命周期n7.2.4 定时器与图形动画设计定时器与图形动画设计Java程序设计实用教程(第4版)7.2.1 Runnable接口与接口与Thread类类1.Runnable接口接口public interface Runnable public abstract void run();Java程序设计实用教程(第4版)2. Thread线程类线程类public class Thread extends Object implements Runnable public Thread() /构造方法构造方法 public Thread(String name) /name指定线程

6、名指定线程名 public Thread(Runnable target) /target指定线程的目标对象指定线程的目标对象 public Thread(Runnable target, String name) public void run() /描述线程操作的线程体描述线程操作的线程体 public final String getName() /返回线程名返回线程名 public final void setName(String name) /设置线程名设置线程名 public static int activeCount() /返回当前活动线程个数返回当前活动线程个数 publi

7、c static Thread currentThread() /返回当前执行线程对象返回当前执行线程对象 public Sting toString() /返回线程的字符串信息返回线程的字符串信息 public void start() /启动已创建的线程对象启动已创建的线程对象Java程序设计实用教程(第4版)【例例7.1】 声明继承声明继承Thread类类的奇数的奇数/偶数序列线程。偶数序列线程。1.main是首先启动执行的线程是首先启动执行的线程2.两个线程交替运行两个线程交替运行Java程序设计实用教程(第4版)【例例7.2】 声明实现声明实现Runnable接接口的奇数口的奇数/偶

8、数序列线程。偶数序列线程。Thread类的类的run()方法声明如下:方法声明如下:public void run() /描述线程操作的线程体描述线程操作的线程体 if (target != null) target.run(); /执行目标对象的执行目标对象的run()方法方法Thread t1 = new Thread(); /t1的的run()方法为空方法为空Thread thread_odd = new Thread(target ,奇数线程奇数线程); /thread_odd实际执行实际执行target的的run()方法方法Java程序设计实用教程(第4版)3. 两种创建线程方式的比

9、较两种创建线程方式的比较(1) 继承线程继承线程Thread类类public class NumberThread extends Thread(2) 实现实现Runnable接口接口public class NumberRunnable implements RunnableJava程序设计实用教程(第4版)7.2.2 线程对象的优先级线程对象的优先级1.Thread类中声明了类中声明了3个表示优先级的公有静态常量:个表示优先级的公有静态常量:public static final int MIN_PRIORITY=1 /最低优先级最低优先级public static final int M

10、AX_PRIORITY=10 /最高优先级最高优先级public static final int NORM_PRIORITY=5 /默认优先级默认优先级2.Thread类中与线程优先级有关的方法有以下类中与线程优先级有关的方法有以下2个:个:public final int getPriority() /获得线程优先级获得线程优先级public final void setPriority(int newPriority)/设置线程优先级设置线程优先级Java程序设计实用教程(第4版)7.2.3 线程对象的生命周期线程对象的生命周期1.Thread.State类声明的线程状态类声明的线程状态

11、新建态、运行态、阻塞态和等待态、终止态新建态、运行态、阻塞态和等待态、终止态 Java程序设计实用教程(第4版)2. Thread类中改变和判断线程状态的方法类中改变和判断线程状态的方法1.线程启动线程启动public void start() /启动线程对象启动线程对象public final boolean isAlive() /是否活动状态是否活动状态 2.线程睡眠线程睡眠public static void sleep(long millis) throws InterruptedException3.线程中断线程中断public void interrupt() /设置中断标记设置中

12、断标记public boolean isInterrupted() /判断是否中断判断是否中断Java程序设计实用教程(第4版)【例例7.3】 设计滚动字演示线程状态及改设计滚动字演示线程状态及改变方法。变方法。本例演示线程对象的生命周期从创建到终止的过本例演示线程对象的生命周期从创建到终止的过程,期间使用程,期间使用new、start()、sleep()、interrupt()等方法改变线程的状态。本例综合运用内部类、图形等方法改变线程的状态。本例综合运用内部类、图形用户界面、线程等多方面技术实现设计思想。用户界面、线程等多方面技术实现设计思想。 1.声明自定义面板类为私有内部类并实现多个接

13、口声明自定义面板类为私有内部类并实现多个接口对象嵌套对象嵌套2.线程状态变化线程状态变化Java程序设计实用教程(第4版)7.2.4 定时器与图形动画设计定时器与图形动画设计public class Timer implements Serializable public Timer(int delay, ActionListener l) public void addActionListener(ActionListener l) /注册定时事件监听器注册定时事件监听器 public void setDelay(int delay) /设置延时的时间间隔设置延时的时间间隔 public v

14、oid start() /启动定时器启动定时器 public void stop() /停止定时器停止定时器 public void restart() /重新启动定时器重新启动定时器【例例7.4】 弹弹球,使用定时器实现图形动画。弹弹球,使用定时器实现图形动画。Java程序设计实用教程(第4版)7.3 线程的同步机制线程的同步机制n7.3.1 交互线程交互线程n7.3.2 线程间的竞争关系与线程互斥线程间的竞争关系与线程互斥n7.3.3 线程间的协作关系与线程同步线程间的协作关系与线程同步Java程序设计实用教程(第4版)7.3.1 交互线程交互线程1.无关线程与交互线程无关线程与交互线程无

15、关的并发线程是指它们分别在不同的变量集合上无关的并发线程是指它们分别在不同的变量集合上操作。操作。 交互交互的并发线程是指它们共享某些变量。的并发线程是指它们共享某些变量。 2.并发执行的交互线程间存在与时间有关的错并发执行的交互线程间存在与时间有关的错误误Java程序设计实用教程(第4版)【例例7.5】 银行账户的存银行账户的存/取款线取款线程设计。程设计。图图7.7 并发线程共享临界资源并发线程共享临界资源 n运行结果不惟一,取决于线程调度运行结果不惟一,取决于线程调度n线程执行被打断时出现错误线程执行被打断时出现错误Java程序设计实用教程(第4版)7.3.2 线程间的竞争关系与线程互斥

16、线程间的竞争关系与线程互斥1.线程间的竞争关系线程间的竞争关系被阻塞线程永远得不到访问权,出现两个问题:被阻塞线程永远得不到访问权,出现两个问题:死锁、饥饿。死锁、饥饿。 Java程序设计实用教程(第4版)2. 线程互斥和临界区管理线程互斥和临界区管理操作系统对共享一个变量的若干线程进入各自操作系统对共享一个变量的若干线程进入各自临界区有以下临界区有以下3个调度原则:个调度原则:一次至多一个线程能够在它的临界区内。一次至多一个线程能够在它的临界区内。不能让一个线程无限地留在它的临界区内。不能让一个线程无限地留在它的临界区内。不能强迫一个线程无限地等待进入它的临界区。不能强迫一个线程无限地等待进

17、入它的临界区。特别地,进入临界区的任一线程不能妨碍正等特别地,进入临界区的任一线程不能妨碍正等待进入的其他线程的进展。待进入的其他线程的进展。Java程序设计实用教程(第4版)3. Java的线程互斥实现的线程互斥实现1.同步语句同步语句synchronized (对象对象) 语句语句2.同步方法同步方法synchronized 方法声明方法声明Java程序设计实用教程(第4版)【例例7.6】 互斥的存互斥的存/取款线程设计。取款线程设计。图图7.9 带互斥锁的并发线程执行流程带互斥锁的并发线程执行流程 Java程序设计实用教程(第4版)7.3.3 线程间的协作关系与线程同步线程间的协作关系与

18、线程同步1.线程间的协作关系线程间的协作关系【例例7.7】 发送线程与接收线程。发送线程与接收线程。Java程序设计实用教程(第4版)2. 线程同步线程同步4.Java的线程通信方法的线程通信方法public final void wait() throws InterruptedException /等待等待public final native void notify(); /唤醒一个等待线程唤醒一个等待线程public final native void notifyAll(); /唤醒所有等待线程唤醒所有等待线程1.线程同步机制线程同步机制背景背景设置信号量设置信号量线程根据信号量状态而执行线程根据信号量状态而执行Java程序设计实用教程(第4版)【例例7.8】 采用信号量和同步方法使发送采用信号量和同步方法使发送线程与接收线程同步运行。线程与接收线程同步运

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论