资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第七章第七章 多线程与异常处理多线程与异常处理u学习内容n多线程的基本概念程序、进程与线程多任务与多线程nJava多线程编程通过继承Thread类通过实现Runnable接口一、多线程的基本概念u多任务n计算机操作系统同时执行几个程序或任务的能力,如下所示:电电 脑脑听歌听歌下载下载QQ聊天聊天u多线程n在同一应用程序中,有多个控制流同时执行,如下所示:QQ 聊聊天天文字聊天文字聊天视频聊天视频聊天发送文件发送文件u程序n是一组指令的有序集合,是静态的代码;n例如:你的机器安装了一个QQ程序。u进程n是某个程序的一次执行过程,是一个动态的实体,它有自己的生命周期;n例如:同时允许两个帐号登陆,那此时有两个QQ进程在运行。u线程n是一个比进程更细微的程序执行序列,是进程的某个子序列。n例如:上QQ后可以同时文字聊天,视频聊天和发送文件;此时该QQ进程创建并管理三个线程,如下:公共数据区公共数据区(内存)(内存)进程进程线程线程A:文字:文字线程线程B:视频:视频线程线程C:传文件:传文件二、Java多线程编程uThread类n提供了用于启动、阻塞、恢复以及终止线程的一系列方法,如:start()、sleep(1000) 等n除此之外,还提供了控制线程优先级以及得到线程的名字等方法,如:setPriority(3)、getName() 等u方法一:通过Thread类创建多线程n定义Thread类的子类,如ThdDemo.javan重写Thread类的run()方法,包含了线程要实现的操作;n创建一个该子类的对象; Thread thd = new ThdDemo(); n调用start()方法启动线程; thd.start();public class ThdDemo extends Thread public void run() for(int i=0;i5;i+) System.out.println(i); try this.sleep(100);catch(Exception e) public static void main(String args) Thread t = new ThdDemo(); t.start(); /启动线程 System.out.println(“Main continue!”); 线程休眠100ms线程执行的任务u线程的生命周期创建状态创建状态就绪状态就绪状态执行状态执行状态死亡状态死亡状态阻塞状态阻塞状态new ThdDemo()start()sleep(100)uP205 例7 1ncurrentThread():得到当前线程对象ngetName() :得到线程的名字uRunnable接口n由于Java只支持单继承,使用扩展Thread类的方式实现多线程,就会导致应用程序不能继承其他的类;n使程序能够多线程执行的更好的方法是实现java.lang.Runnable接口;nRunnable接口中只有一个run()方法,实现该接口必须实现这个方法。u方法二:通过Runnable接口创建多线程n定义一个实现Runnable接口的类,该类必须实现接口中唯一的run()方法; public class RunThd implements Runnable public void run() /线程体 n创建一个该类的对象; RunThd rt = new RunThd();n创建一个Thread类的对象; Thread th = new Thread(rt);n调用start()方法启动线程。class RunThd implements Runnable public void run() /statement public class RunThdDemo public static void main(String args) RunThd rt = new RunThd(); Thread td = new Thread(rt); td.start(); uP208 例7 2u比较例7 3、例7 - 4三、异常处理u错误n致命性的,程序无法继续运行n例如:内存溢出、堆栈溢出等n一般通过修改程序避免错误的发生u异常n非致命性的,作相应的处理后程序可以继续运行n例如:数组越界、文件找不到等u系统定义的常见异常类nNullPointerException 访问的对象还没有实例化nArrayIndexOutOfBoundsException访问数组元素时,数组下标越界nFileNotFoundException试图存取一个并不存在的文件nIOException通常的I/O错误nu异常处理n当Java程序运行过程中发生一个可识别的运行异常时,系统会自动产生一个相应的异常类的对象,即产生一个异常n在该异常中包含了程序运行出错的相关信息n用户可以编程捕获该异常,并作相关的处理u异常举例public static void main(String args) int score = 100,50,60,90,99,7; for(int i = 0;i 7; i+) System.out.println(scorei); System.out.println(“Continue”);u捕获并处理异常try /可能发生异常的代码段 catch(ExceptionType e) /异常处理代码 u示例SimpleExceptionDemo.javapublic class SimpleExceptionDemo public static void main(String args) File f = new File(src/bbc.txt); try FileInputStream in=new FileInputStream(f); System.out.println(continue.?); catch(FileNotFoundException e) System.out.println(e.getMessage(); u捕获并处理异常(多个)try /可能发生异常的代码catch(ExceptionType1 e) /异常处理代码1catch(ExceptionType2 e) /异常处理代码2finally /总是要执行的代码 /继续执行继续执行u说明ncatch()子句使用形参指明它所能够捕获并处理的异常类型ne.getMessage() 和 e.printStackTrace()常被用来得到异常的相关信息n不论在try代码段是否产生异常,finally中的程序代码段都会被执行,常用来释放内存以外的资源u示例MultiExceptionDemo.java演示多个catch子句及finally子句的执行。u异常与错误类的结构层次
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号