![第八章异常处理与多线程_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/5b5fc15e-86dc-4ed7-8212-d3b4948d2a61/5b5fc15e-86dc-4ed7-8212-d3b4948d2a611.gif)
![第八章异常处理与多线程_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/5b5fc15e-86dc-4ed7-8212-d3b4948d2a61/5b5fc15e-86dc-4ed7-8212-d3b4948d2a612.gif)
![第八章异常处理与多线程_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/5b5fc15e-86dc-4ed7-8212-d3b4948d2a61/5b5fc15e-86dc-4ed7-8212-d3b4948d2a613.gif)
![第八章异常处理与多线程_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/5b5fc15e-86dc-4ed7-8212-d3b4948d2a61/5b5fc15e-86dc-4ed7-8212-d3b4948d2a614.gif)
![第八章异常处理与多线程_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/5b5fc15e-86dc-4ed7-8212-d3b4948d2a61/5b5fc15e-86dc-4ed7-8212-d3b4948d2a615.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 异常处理与多线程8.1 异常就是Java程序在运行过程中出错, 异常终止的情况.可能导致异常发生的原因有许多,如数组下标越界,空指针访问,试图读取不存在的文件,网络连接中断等.(1)错误(Error) - JVM系统内部错误,资源耗尽,内存溢出的严重情况,程序员无能为力,只能让程序终止.(2)违例(Exception) - 编程错误或偶然外在因素导致的一般性错误.如对负数开方, 空指针访问,试图读取不存在的文件,网络连接中断.Exception可预先预防.Java异常类层次关系图(1)运行时异常(RuntimeException)是因程序员设计或实现方式不当造成的.如果事先检查数组元素
2、下标不超出数组长度,异常就不会抛出.(2)非运行时异常 1(Non-RuntimeException)-由编译器编译时发生的异常,而不是程序本身的错误,如IOException有时是环境造成的,如文件未找到或URL无效等.异常处理Java有两种方式:(1) 使用 trycatch.finally语句捕获并处理异常对象,其中finally语句可省略. 通常将可能发生异常的语句放在try语句中.(2) 不需处理它生成的异常,而是向上传递,由调用它的方法来处理,使用throws语句声明它可以抛出的异常,而不捕捉它们.(1) j3_28.java 使用 trycatch.finally语句捕获数组下标
3、越界异常并处理异(2)ExceptionTest3.java -非运行时异常(编译器编译时发生的异常-Java编译器从语法上要求对异常事件做出处理,否则不能通过编译)例如:ExceptionTest3.java - 不能通过编译,改正为ExceptionTest4.java就可编 2ExceptionTest4.java -(文件不存-非运行时异常)- (使用 trycatch.finally(3) j3_29.java 使用throws语句声明抛出异常对象给调用方用的catch()方8.2 多线程 (java中引入多线程机制的目的在于实现多任务,以提高程序利用CPU的效率.主要通过多线程之间
4、共享代码和数据来实现的.)多线程是根据多任务的原理,在一个程序内部实现多个任务(顺序控制流)的并发执行.其中的每个任务被称为线程(Thread), 线程是一个程序内部的顺序控制流.(1)进程 执行一个程序的过程(包括分配内存外设等资源等侯处理器的执行程序中的指令程序执行完后系统回收所分配资源的过程),每个进程有自己的内存空间和资源进程之间不会共享系统资源,进程切换开销大。(2)线程 - 线程是比进程更小的运行单位,一个进程可划分成多个线程。线程由操作系统调度独立执行控制,和进程的区别是没有独立的存储空间,而是和所属进程的其它线程共享一个存储空间,即共享进程资源,所以线程之间数据通信交换比进程切
5、换快。(3)每个Java程序都有一个默认主线程,这个主线程从main方法开始并负责执行main方法。在main方法的执行中再创建的线程称为其他线程,如果main方法的执行中没有创建其他线程,那么main方法执行完最后一条语句,及main方法返回时,JVM就会结束Java应用程序,如果main方法中再创建了其他线程,那么JVM就会在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU,直到JVM执行完所有线程才会结束Java应用程序。因此通过多线程技术可提高CPU的使用效率和多程序的并发执行,完成多任务。(4)线程随着程序的运行而产生, 随着程序的结束而消亡.每个线程都存在一个从新建,运
6、行到死亡的生命周期.在生命周期中,一个线程具有新建,就绪, 运行, 阻塞和终止5种状态。8.3 线程的基本概念每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的, 方法run( )称为线程体.8.4 线程实现的两种方法(1) 使用Thread类的子类方法创建线程步骤1. 定义一个类继承Thread类,重写Thread类中的run( )方法2. 创建该Thread子类的对象3. 调用该对象的start( )方法时, run( )方法将被自动调用,线程启动.此方法直接继承Thread类创建线程时, Thread类的子类Runner3无法从其他类继承, run( )方法的
7、当前对象就是线程对象,可直接操纵. 这种方法简单. java中只允许单继承,限制了类的自由,浪费了类的资源,因此采用继承Thread类来创建线程不是最好的方法.(2) 实现Runnable接口创建多线程步骤运行线程的另一种方法是实现Runnable接口,然后生成运行这个类的线程即可. Runnable接口是定义在java.lang包中的一个接口,其中只提供了一个抽象的run( ) 方法,即线程体.1. 定义一个类实现Runnable接口,重写其中的run( )方法.2. 创建Runnable接口实现类的对象.3. 创建该Thread类的对象(以先前Runnable类型对象为构造方法实参)4.
8、调用Thread对象的start( )方法时, run( )方法将被自动调用,启动线程.在本例中创建了两个新线程t1, t2,它们共享Runner2()类中的run( )方法,同时也共享创建Runnable接口实现类的对象r, 两个线程t1, t2在运行中分别操纵对象r调用其重写run( )方法.其结果线程t1, t2作为独立的顺序控制流,并发地交替执行,如果线程t1因某种原因处于阻塞状态,如等待用户键盘输入,CPU会立即转到线程t2执行,依此类推,而不必空置CPU.使用Runnable接口创建线程时,可以将CPU,代码和数据分开,形成清晰的模型. 线程体.run( ) 方法所在的类还可从其它
9、类继承一些有用的属性和方法,保持程序风格一致性.变量值不会影响其它线程的run()方法中的局部变量值3.8.3 线程的状态线程随着程序的运行而产生, 随着程序的结束而消亡.每个线程都存在一个从新建,运行到死亡的生命周期.在线程生命周期中,一个线程具有新建,就绪, 运行, 阻塞和终止5种状态, Thread类中的方法可以改变线程的状态.在整个生命周期中, 线程对象总是处于5种生存状态中某一种.如图7.4线程在5种生存状态中转换.(1) 新建线程(new thread)- 用new创建一个线程处于新建状态。它仅是一个空对象,并未得到系统资源。(2) 就绪状态(runnable )- 用start(
10、 )方法启动一个线程后,系统为该线程分配资源。此时该线程进入线程对列排队,即线程进入就绪状态,等待处理器执行。(3) 运行状态(running )- 系统调度一个可运行线程,使该线程占用处理器,执行该线程的run( )方法,此时线程进入运行状态。(4) 阻塞状态 (Not runnable)- 由于某种原因线程不能运行,即使处理器空闲,该线程也不会执行。如输入输出等待,睡眠,和锁定等原因。只有阻塞原因被消除,该线程才进入运行状态,并再次进入线程对列排队等待处理器从上次中断处继续运行。(5) 终止状态(dead)- 线程执行完毕进入终止状态,也就是run()方法执行完,该线程自然撤消。终止有两个
11、原因:自然撤消或被停止。isAlive()方法可返回线程运行状态(是否)。3.8.4 对线程状态的控制在对线中有若干方法改变线程状态。(1) 使线程进入睡眠状态的sleep( )方法public static void sleep( long millis) throws InterruptedException millis -睡眠时间(毫秒)sleep( )方法使线程进入睡眠状态,即不可运行状态时抛出一个中断异常InterruptedException。(2) 暂停线程的yield( ) 方法yield( ) 方法暂停程序的执行,但线程仍在可运行状态(就绪状态runnable - 末进入阻
12、塞状态)。系统选择同优先级的线程执行,若无同优先级的线程,则继续执行该线程。(3) join( ) 方法join( ) 方法使本线程暂停执行,直到调用该方法的线程执行结束后再继续执行本线程。本线程要等到调用该方法的线程结束后再继续执行,本书称线程联合。(4)wait( )和 notify( ) 方法wait( )和 notify( ) 方法是在同步(独占)方法中使用,wait( )方法使当前线程进入阻塞状态,直到被另一线程唤醒。notify( ) 方法把线程状态的改变通知对列中的其它线程,使它们进入可运行状态。(5)suspend( )挂起方法和 resume( ) 恢复方法suspend(
13、)方法使当前线程由就绪状态(Runnable)状态切换到阻塞状态(Not Runnable),该线程若要回到Runnable状态,必须调用resume( ) 方法来实现。(6) interrupt( )中断方法Public void interrupt( ); - 为线程设置中断标记,当run()方法运行时用isInterrupted( ) 方法检验此标记。在线程进入休眠状态后,如调用interrupt( ) 方法,可捕捉到一个sleep( ) 方法抛出的InterruptedException异常并中断sleep状态。每抛出一InterruptedException异常都会清除中断标记。Pu
14、blic void Boolean isInterrupted( ) ;Public static void Boolean isInterrupted( ) ;8.6 线程的优先级调度和管理线程的优先级是一些介于1到10的整数字的常量,它表示线程间的执行顺序。 public static final int NORM_PRIORITY=5 默认public static final int MIN_PRIORITY=1 最低public static final int MAX_PRIORITY=10 最高设置或取得优先级用:public final int setPriority ( )
15、public final int getPriority ( ) 方法.线程调度是根据线程的优先级决定它的执行,对相同优先级的线程按分时和独占两种方式调度。分时按分到的时间片执行,执行完让出处理器。独占方式要执行完才让出处理器。几种情况当前线程放弃CPU(1) 调用sleep( )yield( ) 方法(2) I/O访问外存读写等待输入等操作导致阻塞状态。(3) 调用wait( )方法(4) 低优先级8.7 线程组在java中每个线程都是一个线程组的成员,线程组把多个线程集合为一个对象。可对线程组同时操作和分组来区分不同安全的线程。线程组创建的2个方法:public ThreadGroup(
16、String name ) - 创建一个名为name的线程组public ThreadGroup(ThreadGroup parent, String name ) 在线程组parent中创建一个名为name的线程组属性和方法:public final String getName ( ) 方法. 返回线程组的名称。 public final String get Parent ( ) 方法. 返回线程组的父类名。public final void getMaxPriority ( ) 返回线程组最高优先级public final void setMaxPriority (int n ) 设置线程组最高优先级public int activeGroup( ) - 返回线程组活动线程数。public int enumerate(Thread list ) 将活动线程复制到线程组中。suspend( )stop() resume( ) 方法8.8 线程同步在栈中存取数据时容易发生资源冲突因此需解决同一个数据被多个线程同时访问的问题,实现在一个进程中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人租房合同的(31篇)
- 2024-2025学年北京市房山区高一上学期期中考试历史试卷
- 2025年公共设施配套建设项目房屋征收合同
- 2025年住宅销售策划合同模板规定
- 2025年官方离婚协议范本策划(双方同意版)
- 2025年全球贸易合同制定原则及合规要求解析
- 2025年债权转让与贷款合作协议
- 2025年车辆所有权变更策划协议书模板
- 2025年农村土地利用合作协议
- 2025年人事档案授权委托协议
- 【青岛版《科学》】四年级下册第一单元1 《运动与力》 教学设计
- 加气站安全管理(最新)精选PPT课件
- 47《心经》图解PPT课件(50页PPT)
- 污水管线铺设施工工艺方法
- 维修保运车间岗位职责
- 液碱生产工序及生产流程叙述
- 三年级学生《成长记录》模板
- 好书推荐——《三毛流浪记》
- 方菱F2100B中文系统说明书
- 人教版动手动脑学物理答案 八下
- 九宫格数独题目(打印版)
评论
0/150
提交评论