第七章多线程与异常处理(1)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第七章多线程与异常处理学习内容多线程的基本概念•程序、进程与线程•多任务与多线程Java多线程编程•通过继承Thread类•通过实现Runnable接口一、多线程的基本概念多任务计算机操作系统同时执行几个程序或任务的能力,如下所示:电脑听歌下载QQ聊天多线程在同一应用程序中,有多个控制流同时执行,如下所示:QQ聊天文字聊天视频聊天发送文件程序是一组指令的有序集合,是静态的代码;例如:你的机器安装了一个QQ程序。进程是某个程序的一次执行过程,是一个动态的实体,它有自己的生命周期;例如:同时允许两个帐号登陆,那此时有两个QQ进程在运行。线程是一个比进程更细微的程序执行序列,是进程的某个子序列。例如:上QQ后可以同时文字聊天,视频聊天和发送文件;此时该QQ进程创建并管理三个线程,如下:公共数据区(内存)进程线程A:文字线程B:视频线程C:传文件二、Java多线程编程Thread类提供了用于启动、阻塞、恢复以及终止线程的一系列方法,如:•start()、sleep(1000)等除此之外,还提供了控制线程优先级以及得到线程的名字等方法,如:•setPriority(3)、getName()等方法一:通过Thread类创建多线程定义Thread类的子类,如ThdDemo.java重写Thread类的run()方法,包含了线程要实现的操作;创建一个该子类的对象;Threadthd=newThdDemo();调用start()方法启动线程;thd.start();publicclassThdDemoextendsThread{publicvoidrun(){for(inti=0;i5;i++){System.out.println(i);try{this.sleep(100);}catch(Exceptione){}}}publicstaticvoidmain(String[]args){Threadt=newThdDemo();t.start();//启动线程System.out.println(“Maincontinue!”);}}线程休眠100ms线程执行的任务线程的生命周期创建状态就绪状态执行状态死亡状态阻塞状态newThdDemo()start()sleep(100)P205例7–1currentThread():得到当前线程对象getName():得到线程的名字Runnable接口由于Java只支持单继承,使用扩展Thread类的方式实现多线程,就会导致应用程序不能继承其他的类;使程序能够多线程执行的更好的方法是实现java.lang.Runnable接口;Runnable接口中只有一个run()方法,实现该接口必须实现这个方法。方法二:通过Runnable接口创建多线程定义一个实现Runnable接口的类,该类必须实现接口中唯一的run()方法;publicclassRunThdimplementsRunnable{publicvoidrun(){//线程体}}创建一个该类的对象;RunThdrt=newRunThd();创建一个Thread类的对象;Threadth=newThread(rt);调用start()方法启动线程。classRunThdimplementsRunnable{publicvoidrun(){//statement}}publicclassRunThdDemo{publicstaticvoidmain(String[]args){RunThdrt=newRunThd();Threadtd=newThread(rt);td.start();}}P208例7–2比较例7–3、例7-4三、异常处理错误致命性的,程序无法继续运行例如:内存溢出、堆栈溢出等一般通过修改程序避免错误的发生异常非致命性的,作相应的处理后程序可以继续运行例如:数组越界、文件找不到等系统定义的常见异常类NullPointerException•访问的对象还没有实例化ArrayIndexOutOfBoundsException•访问数组元素时,数组下标越界FileNotFoundException•试图存取一个并不存在的文件IOException•通常的I/O错误……异常处理当Java程序运行过程中发生一个可识别的运行异常时,系统会自动产生一个相应的异常类的对象,即产生一个异常在该异常中包含了程序运行出错的相关信息用户可以编程捕获该异常,并作相关的处理异常举例publicstaticvoidmain(String[]args){int[]score={100,50,60,90,99,7};for(inti=0;i7;i++){System.out.println(score[i]);}System.out.println(“Continue…”);}捕获并处理异常try{//可能发生异常的代码段……}catch(ExceptionTypee){//异常处理代码……}示例SimpleExceptionDemo.javapublicclassSimpleExceptionDemo{publicstaticvoidmain(String[]args){Filef=newFile(src/bbc.txt);try{FileInputStreamin=newFileInputStream(f);System.out.println(continue...?);}catch(FileNotFoundExceptione){System.out.println(e.getMessage());}}}捕获并处理异常(多个)try{……//可能发生异常的代码}catch(ExceptionType1e){……//异常处理代码1}catch(ExceptionType2e){……//异常处理代码2}finally{……//总是要执行的代码}……//继续执行说明catch()子句使用形参指明它所能够捕获并处理的异常类型e.getMessage()和e.printStackTrace()常被用来得到异常的相关信息不论在try代码段是否产生异常,finally{}中的程序代码段都会被执行,常用来释放内存以外的资源示例MultiExceptionDemo.java-演示多个catch子句及finally子句的执行。异常与错误类的结构层次

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功