




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计,清华大学出版社,第7章 多线程与异常处理,第7章 多线程与异常处理,1、多线程的概念 2、线程的使用 3、线程同步 4、异常处理,7.1 多线程的概念,1、线程与多线程 2、线程的生命周期 3、线程的优先级,1、线程与多线程,什么是进程 进程是程序的一次执行 进程是程序在一个数据集合上运行的过程。进程是系统资源分配和调度的独立单位。 什么是线程 在多线程的操作系统中,一个进程中包含多个线程。 线程是独立运行的基本单位。 进程作为资源分配的基本单位。同一进程的多个线程共享该进程所拥有的资源。,进程与多线程的区别,在Java编程中,每实例化一个线程对象,就创建一个虚拟的CPU,由虚拟CPU处理本线程数据。 每个Java程序都有一个主线程,即由main()方法所对应的线程。对于applet,浏览器即是主线程。 除主线程外,线程无法自行启动,必须通过其他程序来启动它。,2、线程的生命周期,线程要经历创建、就绪、运行、阻塞和死亡等5个状态 ,称为生命周期。,创建状态,通过new命令创建一个线程对象,创建后的线程就处于创建状态。 Thread thread1=new Thread();,就绪状态,处于创建状态的线程对象通过调用start()方法就进入了就绪状态。 Thread thread1=new Thread(); thread1.start(); 进入就绪状态的线程对象被放到一个等待队列中,等待系统为其分配对处理器的控制权。,运行状态,线程处于运行状态,该进程对应的代码目前正在运行。除非运行过程中对处理器的控制权被一个优先级更高的线程抢占,否则该线程将一直运行完毕然后释放对处理器的控制权。 run(),阻塞状态,正在运行的线程由于发生某事件而暂时无法继续执行时,便放弃处理器处于暂停状态。这种暂停状态称为阻塞状态。常见的导致线程阻塞的典型事件为:I/O请求,申请缓冲空间等。 sleep(),wait()方法 当I/O完成,获得缓冲空间后,线程就由阻塞状态转变为就绪状态。,死亡状态,线程执行完毕或被另一线程强行终止执行,线程退出运行状态,并不再进入就绪队列。 run()方法执行结束,线程会被撤销。 执行System.exit()方法强行退出,导致进程强行终止,3、线程的优先级,Java提供一个线程调度器来监控进入就绪状态的所有线程。 线程调度器根据线程的优先级决定调度哪个线程执行。 线程的执行方式: 时间片方式 非时间片方式(独占式) 在Java中,线程优先级的范围为110,即Thread.MIN_PRIORITY到Thread.MAX_PRIORITY。默认优先级为5,即Thread.NORM_PRIORITY。getPriority()方法可以获得线程的优先级 setPriority()方法可以设置线程的优先级,7.2 线程的使用方法,1、创建Thread子类构造线程 2、实现Runnable接口构造线程,基本方法: 创建线程类子类,再用其他类调用 线程。,1、创建Thread子类构造线程,线程的创建与启动 (1)创建一个Thread类的子类; Thread类位于java.lang包中 (2)在子类中父类中的run()方法,run()方法中包含了线程要实现的操作; (3)用关键字new 创建一个线程对象; (4)调用start()方法启动线程。线程启动后当执行完run()方法后,线程会进入死亡状态。,示例,【例7-1】 创建二个Thread类的子类,然后测试它。,这个例子说明了这样几个事实:,(1)创建独立执行线程比较容易,Java负责处理了大部分细节。 (2)各线程并发运行,共同争抢CPU资源,线程抢夺到CPU资源后,就开始执行,无法准确知道某线程能在什么时候开始执行。 (3)线程间的执行是相互独立的。 (4)线程独立于启动它的线程(或程序)。,线程的暂停与恢复 public static void sleep(long millis) : 线程休眠millis毫秒。 public static void sleep(long millis, int nanos) 线程休眠millis毫秒及nanos纳秒。 Thread thread1 = new Thread(); thread1.start(); try thread1.sleep(200,100); catch(InterruptedException e) yield():暂停当前正在执行的线程对象,并执行其他线程。 wait():使线程进入等待状态直到被另一进程唤醒。 notify():把线程的变化通知并唤醒等待的某个线程。,2、 实现Runnable接口构造线程,Runnable接口: 位于java.lang包中,定义如下: package java.lang; public interface Runnable public abstract void run(); 所有实现了Runnable接口的类的对象都可以以线程方式执行。,1、实现Runnable接口 2、定义run( )方法 public class TreadCounting implements Runnable public void run() /在此处添加run()方法代码 ,3、构造线程: Thread(Runnable 对象名); Thread(Runnable 对象名,String 线程名); 4、启动线程: 线程对象.start( );,示例,【例7-2】 创建一个实现Runnable接口的线程类。,二种线程方式的用法区别(选讲),用多线程设计一个模拟火车站售票大厅的工作情形,1、应用线程的子类,class Sale extends Thread int s=100; public void run() System.out.println(getName() + “售机票第“ + s- +“号“); ,class E3 public static void main(String args) Sale t1=new Sale(); t1.start(); ,2、应用Runnable接口,class Threadsale implements Runnable int tickets=100 ; public void run() ,public class E9_4 public static void main(String args) Threadsale t=new Threadsale(); /实例化线程 Thread t1=new Thread (t,“第1售票窗口“); Thread t2=new Thread (t,“第2售票窗口“); Thread t3=new Thread (t,“第3售票窗口“); Thread t4=new Thread (t,“第4售票窗口“); t1.start(); t2.start(); t3.start(); t4.start(); ,7.3 异常处理,异常(Exception)指程序运行过程中出现的非正常现象。 在Java中,把异常分为错误(Error)与异常(Exception)两大类。 错误(Error)通常指程序本身存在非法的情形。 异常情况(Exception)表示另外一种“非同寻常”的错误。这种错误通常是不可预测的。常见的异常情况包括内存不足,找不到所需的文件等。,Throwable类派生了Error类和Exception类。 Error类描述内部错误,由系统保留,程序不能抛出Error类对象。 Exception类供程序使用。程序运行过程中出现异常可抛出Exception类的对象。,Exception类常用方法,public Exception() public Exception(String s) public String toString() 返回描述该Exception对象信息的字符串 public void printStackTrace() 在当前的标准输出设备上打印出当前异常对象的堆栈使用轨迹,系统定义的异常类,Exception类派生了若干个子类,每个子类代表了一种特定的运行错误。 FileNotFoundException IOException InterruptedException UnknownHostException SecurityException ClassNotFoundException ,系统自动抛出的异常,例7-9 : class Example7_9 public static void main(String args) int a=5,d=0; System.out.println(a/d); ,异常处理一般结构,try 可能出现异常的程序代码 catch(异常类1 变量1) 异常类1对应的异常处理代码 catch(异常类2 变量2) 异常类2对应的异常处理代码 . finally 无论异常是否发生都要执行的代码 ,异常处理,例7-10: class A public static void main(String args) int a=20,b=0; try System.out.println(a/b); catch(Exception e) System.out.println(“除数为0“); finally System.out.println(“例7-10程序结束”); ,例7-11 /* 数组下标越界引发异常*/ class Example7_11 public static void main(String args) int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胃造瘘术后病人的护理
- 2025至2030年图像传输设备项目投资价值分析报告
- 2025至2030年可充气塑料打火机项目投资价值分析报告
- 2025至2030年单节万向节项目投资价值分析报告
- 2025至2030年全自动多功能腐竹生产线项目投资价值分析报告
- 2025至2030年內衣项目投资价值分析报告
- 《钢筋混凝土主体结构施工》课件-任务7楼梯的模板施工
- 授权经销商合同
- 老年人摔倒的急救与护理
- 补偿贸易购销合同范本
- 《活着》读后感课件
- 技术的本质(经典版)
- 严重精神障碍患者管理服务规范标准
- 主动脉夹层外科治疗及围术期血压管理
- D500-D505 2016年合订本防雷与接地图集
- 小学劳动教育二下第三单元 1 《水培绿萝》课件
- 初一英语情态动词练习题含答案
- 工程结构检测鉴定与加固第1章工程结构检测鉴定与加固概论课件
- 立体构成概述课件完整版
- 沪教牛津版小学三至六年级英语单词表
- 质量整改通知单(样板)
评论
0/150
提交评论