第5章 异常的处理和线程.ppt

上传人:s****8 文档编号:67322979 上传时间:2022-12-24 格式:PPT 页数:83 大小:583.50KB
返回 下载 相关 举报
第5章 异常的处理和线程.ppt_第1页
第1页 / 共83页
第5章 异常的处理和线程.ppt_第2页
第2页 / 共83页
点击查看更多>>
资源描述

《第5章 异常的处理和线程.ppt》由会员分享,可在线阅读,更多相关《第5章 异常的处理和线程.ppt(83页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、高等学校计算机应用人才培养系列教材5.1第五章第五章 异常的处理和线程异常的处理和线程高等学校计算机应用人才培养系列教材5.2本章结构本章结构u异常的概念异常的概念u使用使用try和和catch处理异常处理异常utry语句的嵌套语句的嵌套uthrow和和throws语句语句ufinally语句语句u自自定定义义的的异异常常和和Java的的系系统异常统异常u线程线程u线程体线程体u线程的调度线程的调度u本章小结本章小结u思考题思考题高等学校计算机应用人才培养系列教材5.3什么是异常什么是异常u异常(Exception)也叫例外。在Java编程语言中,异常就是程序在运行过程中由于硬件设备问题、软件

2、设计错误、缺陷等导致的程序错误。在软件开发过程中,很多情况都将导致异常的产生,例如:(1)想打开的文件不存在;(2)网络连接中断;(3)操作数超出预定范围;(4)正在装载的类文件丢失;(5)访问的数据库打不开;u可见,在程序中产生异常的现象是非常普遍的。在Java编程语言中,对异常的处理有非常完备的机制。异常本身作为一个对象,产生异常就是产生一个异常对象。这个对象可能由应用程序本身产生,也可能由 Java 虚拟机产生,这取决于产生异常的类型。该异常对象中包括了异常事件的类型以及发生异常时应用程序目前的状态和调用过程。请看下面产生异常的例子。高等学校计算机应用人才培养系列教材5.4异常的概念异常

3、的概念uJava中中的的异异常常是是一一个个描描述述在在代代码码段段中中发发生生异异常常(也也就就是是出出错错)情情况况的的对对象象。当当异异常常发发生生时时,一一个个代代表表该该异异常常的的对对象象被被创创建建并并且且在在导导致致该该错错误误的的方方法法中中被被抛抛出出,该该方方法法可可以以选选择自己处理异常或传递该异常择自己处理异常或传递该异常高等学校计算机应用人才培养系列教材5.5【例例8-1】文件操作将产生异常/Exception1.javaimport java.io.*;class Exception1 public static void main(String args)Fil

4、eInputStream fis=new FileInputStream(text.txt);int b;while(b=fis.read()!=-1)System.out.print(b);fis.close();高等学校计算机应用人才培养系列教材5.6当编译这个程序时,屏幕上会输出下面的信息:D:userchap08javac Exception1.javaException1.java:5:unreported exception java.io.FileNotFoundException;must be caught or declared to be thrown FileInput

5、Stream fis=new FileInputStream(text.txt);Exception1.java:7:unreported exception java.io.IOException;must be caught or declared to be thrown while(b=fis.read()!=-1)Exception1.java:10:unreported exception java.io.IOException;must be caught ordeclared to be thrown fis.close();3 errors高等学校计算机应用人才培养系列教材5

6、.78.1 什么是异常什么是异常【例例8-2】数组下标超界的例子/Exception2.javapublic class Exception2 public static void main(String args)String langs =Java,Visaul Basic,C+;int i=0;while(i javac Exception2.java D:userchap08java Exception2JavaVisaul BasicC+Exception in thread main java.lang.ArrayIndexOutOfBoundsException:3at Exce

7、ption2.main(Exception2.java:8)上面的例子编译可以通过,但运行时出现异常信息被抛出。在其循环被执行四次之后,数组下标溢出,程序终止,并带有错误信息,就象前面所示的程序那样。高等学校计算机应用人才培养系列教材5.9【例例8-3】被0除的例子/Exception3.javaclass Exception3 public static void main(String args)int a=0;System.out.println(5/a);我们编译这个程序得到其字节码文件,然后运行它,屏幕上的显示如下:D:userchap08javac Exception3.javaD

8、:userchap08java Exception3Exception in thread main java.lang.ArithmeticException:/by zero at Exception3.main(Exception3.java:5)因为除数不能为0,所以在程序运行的时候出现了除以0溢出的异常事件。高等学校计算机应用人才培养系列教材5.108.1 什么是异常什么是异常 在上面的三个例子中,我们都遇到了异常。屏幕上所显示的信息 java.io.IOException、java.io.FileNotFoundException、java.lang.ArrayIndexOutOf

9、BoundsException 以及java.lang.ArithmeticException 分别指明了异常的类型以及异异常常所所在在的的包包。同时我们也可以看到,对于某些异常,在程序中必须对它进行处理,否则编译程序会指出错误(如例8-1)。但对另一些异常,在程序中可以不做处理,而直接由运行时系统来处理(如例8-3)。在下节中,我们将详细了解这两类异常,以及在程序中如何处理这两类异常。高等学校计算机应用人才培养系列教材5.11Java的异常处理机制的异常处理机制 在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。这个对象可能是由正在运行的方法生成,也可能由Java虚拟机生

10、成,其中包含一些信息指明异常事件的类型以及当异常发生时程序的运行状态等。Java语言提供两种处理异常的机制:(1)捕获异常在Java程序运行过程中系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是一种积极的异常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。(2)声明抛弃异常当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(t

11、hrows)异常。高等学校计算机应用人才培养系列教材5.12u异异常常本本质质上上是是一一个个在在程程序序执执行行期期间间发发生生的的事事件件,这这个个事事件件将中断正常的指令流程将中断正常的指令流程uJava的异常处理机制有以下优点:的异常处理机制有以下优点:n将错误处理代码从常规代码中分离出来;将错误处理代码从常规代码中分离出来;n从调用栈向上传送错误;从调用栈向上传送错误;n对错误类型和错误差异进行分组;对错误类型和错误差异进行分组;n允许对错误进行修正;允许对错误进行修正;n防止了程序的自动终止。防止了程序的自动终止。高等学校计算机应用人才培养系列教材5.13 5.1.2JAVA中的异

12、常结构中的异常结构高等学校计算机应用人才培养系列教材5.14异常类的类层次异常类的类层次 常见的运行时异常如下:常见的运行时异常如下:(1)类型转换异常ClassCastExceptionStringstrName=newstring(“123”);intnNumber=(int)strName;(2)数组超界异常ArrayIndexOutBoundsExceptionintb=newint10;b10=1000;(3)指定数组维数为负值异常NegativeArraySizeExceptionb-1=1001;(4)算术异常ArithmeticExceptionintb=0;a=500/b;(

13、5)Java系统内部异常InternalExceptionJVM抛出的异常。(6)类型不符合异常IncompatibleTypeExceptionintn=12345;Strings=(String)n;(7)内存溢出异常OutOfMemeoryException(8)没有找到类定义异常NoClassDefFoundExceptionaClassaa=newaClas();/但aClass类未定义。(9)空指针异常NullPointerExceptionintb;b0=99;/没有实例化,就访问,将产生空指针。高等学校计算机应用人才培养系列教材5.16异常类的类层次异常类的类层次 常见的非运行

14、时异常如下:(1)ClassNotFoundException:找不到类或接口所产生的异常(2)CloneNotSupportedException:使用对象的clone方法但无法执行Cloneable所产生的异常。(3)IllegalAccessException:类定义不明确所产生的异常。例如:类不为public,或是包含一个类定义在另一个类库内。(4)IOException:在一般情况下不能完成I/O操作所产生的异常。(5)EOFException:打开文件没有数据可以读取所产生的异常(6)FileNotFoundException:在文件系统中,找不到文件名称或路径所产生(7)Inte

15、rruptedIOException:目前线程等待执行,另一线程中断目前线程I/O运行所产生的异常在Sun公司提供的各种API包中,如java.io,java.awt等,都提供不同情况下可能产生的异常。由于异常的种类非常多,需要读者实际运用中逐渐掌握。高等学校计算机应用人才培养系列教材5.175.2使用使用try和和catch处理异常处理异常u尽尽管管Java运运行行时时环环境境提提供供的的默默认认异异常常处处理理程程序序对对于于程程序序的的调试是很有用的,但通常程序员希望自己处理异常:调试是很有用的,但通常程序员希望自己处理异常:n它允许程序员自己修正错误它允许程序员自己修正错误n它可以防止

16、程序自动终止。它可以防止程序自动终止。u为为防防止止和和处处理理一一个个运运行行时时错错误误,只只须须把把所所要要监监控控的的代代码码放放进进一一个个try块块中中就就可可以以了了。在在try块块后后,可可以以包包括括一一个个或或多多个说明程序员希望捕获的错误类型的个说明程序员希望捕获的错误类型的catch子句子句高等学校计算机应用人才培养系列教材5.18捕获异常捕获异常try-catch-finally 一个方法中如果对某种类型的异常对象提供了相应的处理代码,则这个方一个方法中如果对某种类型的异常对象提供了相应的处理代码,则这个方法可捕获该种异常。捕获异常是通过法可捕获该种异常。捕获异常是通

17、过try-catch-finally语句实现的。其语法为:语句实现的。其语法为:try .catch(ExceptionName1 e).catch(ExceptionName2 e).finally.1、try捕获异常的第一步是用try选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。高等学校计算机应用人才培养系列教材5.19捕获异常捕获异常try-catch-finally 2、catch每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数来指明它所能够捕获的异常类型,这个类必须是T

18、hrowable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。catch块中的代码用来对异常对象进行处理,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。getMessage()是类Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。例如:try.catch(FileNotFoundExceptione)System.out.println(e);System.out.println(message:+e.getMessage();e.printSt

19、ackTrace(System.out);catch(IOExceptione)System.out.println(e);高等学校计算机应用人才培养系列教材5.20捕获异常捕获异常try-catch-finally 3、catch 语句的顺序语句的顺序捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊(明确捕获)的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。例如上面的程序如果安排成如下的形式:try.catch(IOExceptione)System.out.println(e

20、);System.out.println(message:+e.getMessage();e.printStackTrace(System.out);catch(FileNotFoundExceptione)System.out.println(e);由于第一个catch语句首先得到匹配,第二个catch语句将不会被执行。编译时将出现“catchnotreached”的错误。高等学校计算机应用人才培养系列教材5.21捕获异常捕获异常try-catch-finally 4、finally捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能

21、够对程序的状态作统一的管理。一般是用来关闭文件或释放其他的系统资源。虽然finally作为try-catch-finally结构的一部分,但在程序是可选的,也就是说可以没有finally语句。如果存在finally语句,不论try块中是否发生了异常,是否执行过catch语句,都要执行finally语句。另外,try-catch-finally可以嵌套。高等学校计算机应用人才培养系列教材5.22try语句的嵌套语句的嵌套 u在在编编程程的的时时候候,一一个个try语语句句块块可可以以在在另另一一个个try语语句句块块的的内内部部。每每次次进进入入try语语句句块块,异异常常的的前前后后关关系系都

22、都会会被被推推入入某某一一个个堆堆栈栈。如如果果一一个个内内部部的的try语语句句不不含含特特殊殊异异常常的的catch处处理理程程序序,堆堆栈栈将将弹弹出出,而而由由下下一一个个try语语句句的的catch处处理理程程序序来来检检查查是是否否与与之之匹匹配配。这这个个过过程程将将继继续续下下去去,直直到到一一个个catch语语句句匹匹配配成成功功,或或者者是是直直到到所所有有的的嵌嵌套套try语语句句被被检检查查耗耗尽尽。如如果果没没有有catch语语句句匹匹配配,Java的的运运行行时时环环境境将将自动处理这个异常。自动处理这个异常。u参见例参见例5.7、5.8高等学校计算机应用人才培养系

23、列教材5.238.3.3 抛出异常抛出异常 例例8-7】try-catch-finally嵌套的例子嵌套的例子class MyoneException extends Exception public class TryInbed public static void main(String args)System.out.println(Entering first try block);try System.out.println(Entering second try block);try throw new MyoneException();finally System.out.pri

24、ntln(finally in 2nd try block);/try-catch-finally嵌套在嵌套在try限定的范围内。限定的范围内。catch(MyoneException e)System.err.println(Caught MyoneException in 1st try block);finally System.err.println(finally in 1st try block);高等学校计算机应用人才培养系列教材5.24抛出异常抛出异常 程序运行结果如下:EnteringfirsttryblockEnteringsecondtryblockfinallyin2n

25、dtryblockCaughtMyoneExceptionin1sttryblockfinallyin1sttryblock高等学校计算机应用人才培养系列教材5.258.3.2 声明抛弃异常声明抛弃异常 【例例8-5】捕获异常的例子(对例8-1进行改进)importjava.io.*;publicclassException5publicstaticvoidmain(Stringargs)tryFileInputStreamfis=newFileInputStream(“text.txt”);intb;while(b=fis.read()!=-1)System.out.print(b);fis

26、.close();catch(FileNotFoundExceptione)System.out.println(e);System.out.println(message:+e.getMessage();e.printStackTrace(System.out);catch(IOExceptione)System.out.println(e);高等学校计算机应用人才培养系列教材5.26throw和和throws语句语句 u在在实实际际的的编编程程中中,程程序序员员可可以以定定义义并并抛抛出出自自己己的的异异常常,使使用用throw语句可以明确抛出某个异常语句可以明确抛出某个异常u如如果果程程

27、序序员员想想定定义义并并抛抛出出自自己己的的异异常常,但但并并不不想想对对异异常常进进行处理,可以使用行处理,可以使用throws语句语句u参见例参见例5.9、5.10高等学校计算机应用人才培养系列教材5.27u异常的抛出异常的抛出n在一个方法中,抛出异常,同时捕捉在一个方法中,抛出异常,同时捕捉n当有多个方法调用时,由特定当有多个方法调用时,由特定(适当适当)的方法捕捉异常的方法捕捉异常被调用的方法主动抛出异常被调用的方法主动抛出异常(throws)异常处理异常处理importjava.io.IOException;classTeststaticchargetChar()throwsIOEx

28、ceptioncharc=(char)System.in.read();returnc;publicstaticvoidmain(Stringargs)trycharc=getChar();System.out.println(c);catch(IOExceptione)System.out.println(e);高等学校计算机应用人才培养系列教材5.288.3.2 声明抛弃异常声明抛弃异常 如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,该方法就应该声明抛弃异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。声明抛弃异常是在一个方

29、法声明中的throws子句中指明的。例如:publicintread()throwsIOExceptionthrows子句中同时可以指明多个异常,之间由逗号隔开。例如:publicstaticvoidmain(Stringargs)throwsIOException,IndexOutOfBoundsException最后,我们再次强调,对于非运行时例外,如前例中的IOException等,程序中必须要作出处理,或者捕获,或者声明抛弃。而对于运行时例外,如前例中的ArithmeticException,IndexOutOfBoundsException,则可以不做处理。高等学校计算机应用人才培养

30、系列教材5.298.3.2 声明抛弃异常声明抛弃异常 【例例8-4】抛弃异常的例子(对例8-1进行改进)/Exception4.javaimportjava.io.*;publicclassException4publicstaticvoidmain(Stringargs)throwsFileNotFoundException,IOExceptionFileInputStreamfis=newFileInputStream(“text.txt”);intb;while(b=fis.read()!=-1)System.out.print(b);fis.close();高等学校计算机应用人才培养系

31、列教材5.30u异常的抛出异常的抛出n主动抛出异常主动抛出异常异常处理异常处理voidparseObj(Strings)throwsNullPointerExceptionif(s=null)thrownewNullPointerException();高等学校计算机应用人才培养系列教材5.318.3.3 抛出异常抛出异常抛出异常就是产生异常对象的过程,首先要生成异常对象,异常或者由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。在方法中,抛出异常对象是通过throw语句实现的。例如:IOExceptione=newIOException();throwe;可以抛出的异常必须是Thro

32、wable或其子类的实例。下面的语句在编译时将会产生语法错误:thrownewString(throwanything);自定义异常类必须是Throwable的直接或间接子类。高等学校计算机应用人才培养系列教材5.328.3.3 抛出异常抛出异常【例例8-6】显示抛出异常详细情况的例子/Exception6.javapublicclassException6publicstaticvoidmain(Stringargs)trythrownewException(MyException);catch(Exceptione)System.err.println(CaughtException);S

33、ystem.err.println(getMessage():+e.getMessage();System.err.println(getLocalizedMessage():+e.getLocalizedMessage();System.err.println(toString():+e);System.err.println(printStackTrace():);e.printStackTrace();高等学校计算机应用人才培养系列教材5.33finally语句语句 ufinally创创建建了了一一个个代代码码块块,其其中中的的代代码码会会在在一一个个try/catch语语句句块块执执行

34、行完完之之后后和和接接下下去去的的try/catch语语句句块块之之前前执执行行,不管是否抛出异常,不管是否抛出异常,finally语句块都会执行语句块都会执行ufinally语语句句在在实实际际编编程程中中是是很很有有用用的的。当当异异常常被被引引发发,通通常常方方法法的的执执行行将将作作一一个个陡陡峭峭的的非非线线性性的的转转向向,异异常常甚甚至至可可以以导导致致方方法法过过早早返返回回。例例如如,如如果果程程序序员员在在一一个个方方法法中中打打开开了了文文件件,然然后后写写文文件件,最最后后关关闭闭文文件件。如如果果在在写写文文件件的的时时候候发发生生了了异异常常,程程序序员员肯肯定定希

35、希望望先先恢恢复复文文件件的的初初始始状状态态,再再关关闭闭文文件件,最最后后再再处处理理异异常常。这这种种情情况况下下,finally语语句句就会发挥作用了就会发挥作用了u参见例参见例5.11高等学校计算机应用人才培养系列教材5.34自定义的异常和自定义的异常和Java的系统异常的系统异常 u要要定定义义程程序序员员自自己己的的异异常常只只需需要要定定义义一一个个Exception类类的的子子类类就就可可以以了了,Exception类类自自己己没没有有定定义义任任何何方方法法,由由于于它它继承了继承了Throwable提供的一些方法提供的一些方法uJava中中的的内内置置异异常常通通常常分分

36、为为两两种种:未未经经检检查查的的异异常常和和受受检检查查的的异异常常,这这些些异异常常一一般般是是标标准准类类RuntimeException的的子子类类,未未经经检检查查的的异异常常不不需需要要被被包包含含在在任任何何方方法法的的throws列列表表中中,这这些些异异常常都都可可以以直直接接由由Java运运行行时时环环境境直直接接引引发发,编译器不检查一个方法是否处理或引发了这些异常编译器不检查一个方法是否处理或引发了这些异常u参见例参见例5.12高等学校计算机应用人才培养系列教材5.35线程线程u一个线程被定义为一个单一的连续控制流一个线程被定义为一个单一的连续控制流u多多任任务务处处理

37、理是是现现代代操操作作系系统统的的核核心心概概念念之之一一,多多任任务务处处理理有有两两种种不不同同的的模模式式:基基于于进进程程的的和和基基于于线线程程的的。进进程程本本质质上上是是一一个个执执行行程程序序,基基于于进进程程的的多多任任务务处处理理的的特特点点是是允允许许计算机同时运行两个或更多的程序计算机同时运行两个或更多的程序u在在Java中,线程可以有不同的状态,有不同的优先级中,线程可以有不同的状态,有不同的优先级高等学校计算机应用人才培养系列教材5.36概述概述u进程进程(Process)n程序程序(Program)的一次动态执行过程的一次动态执行过程,占用特定的地址空间占用特定的

38、地址空间n在某种程度上相互隔离的、独立运行的程序在某种程度上相互隔离的、独立运行的程序n多多任任务务(Multitasking)操操作作系系统统将将CPU时时间间动动态态地地划划分分给给每每个个进进程程,操操作作系系统统同同时时执执行行多多个个进进程程,每每个个进进程程独独立立运运行行n进程的查看进程的查看Windows系统系统:Ctrl+Alt+DelUnix系统系统:ps or top高等学校计算机应用人才培养系列教材5.37概述概述u线程线程(Thread)n线线程程是是进进程程中中一一个个“单单一一的的连连续续控控制制流流程程”(a singlesequentialflowofcont

39、rol)/执行路径执行路径n一个进程可拥有多个并行的一个进程可拥有多个并行的(concurrent)线程线程n一一个个进进程程中中的的线线程程共共享享相相同同的的内内存存单单元元/内内存存地地址址空空间间可可以以访访问问相相同同的的变变量量和和对对象象,而而且且它它们们从从同同一一堆堆中中分分配配对对象象通信、数据交换、同步操作通信、数据交换、同步操作n轻量级进程轻量级进程(lightweightprocess)高等学校计算机应用人才培养系列教材5.38概述概述uJava语言中的线程语言中的线程n大多数现代的操作系统都支持线程大多数现代的操作系统都支持线程n第第一一个个在在语语言言本本身身中中

40、显显性性地地包包含含线线程程的的主主流流编编程程语语言言,它它没有把线程化看作是底层操作系统的工具没有把线程化看作是底层操作系统的工具n每个每个 Java 程序都至少有一个线程程序都至少有一个线程主线程主线程当当一一个个 Java 程程序序启启动动时时,JVM 会会创创建建主主线线程程,并并在在该该线线程程中中调调用程序的用程序的main()main()方法方法JVM还创建了其它线程,如垃圾收集还创建了其它线程,如垃圾收集(garbage collection)高等学校计算机应用人才培养系列教材5.39概述概述u多线程多线程(MultiThreading)语言语言njava.lang.Thre

41、ad类类njava.lang.Runnable接口接口u为什么为什么?(用途用途)nClient/Server设设计计中中的的服服务务器器端端,如如每每个个用用户户请请求求建建立立一一个个线程线程n图形用户界面图形用户界面(GUI)的设计中提高事件响应的灵敏度的设计中提高事件响应的灵敏度n从提高程序执行效率的考虑从提高程序执行效率的考虑n利用多处理器系统利用多处理器系统 n执行异步或后台处理等执行异步或后台处理等高等学校计算机应用人才培养系列教材5.40u初探线程初探线程publicclassSimpleThreadextendsThreadpublicSimpleThread(Strings

42、tr)super(str);publicvoidrun()for(inti=0;i8;i+)System.out.println(i+getName();trysleep(long)(Math.random()*1000);catch(InterruptedExceptione)System.out.println(DONE!+getName();概述概述publicclassTwoThreadsDemopublicstaticvoidmain(Stringargs)newSimpleThread(Jamaica).start();newSimpleThread(Fiji).start();运

43、行结果:0Jamaica0Fiji1Jamaica1Fiji2Jamaica2Fiji3Jamaica4Jamaica5Jamaica3Fiji6Jamaica7Jamaica4FijiDONE!Jamaica5Fiji6Fiji7FijiDONE!Fiji高等学校计算机应用人才培养系列教材5.41Thread类有很多重载的构造方法:类有很多重载的构造方法:uThread()uThread(Runnabletarget)uThread(Runnabletarget,Stringname)uThread(Stringname)uThread(ThreadGroupgroup,Runnableta

44、rget)uThread(ThreadGroup group,Runnable target,String name)uThread(ThreadGroupgroup,Stringname)参参数数target是是线线程程执执行行的的目目标标对对象象,即即线线程程执执行行的的代代码码;group是是线线程程所所在在的的组;组;name是线程的名字。是线程的名字。创创建建线线程程两两种种主主要要的的方方法法:一一种种是是继继承承Thread;另另一一种种是是实实现现接接口口Runnable。可可以根据具体的应用环境进行选择。以根据具体的应用环境进行选择。下面介绍:下面介绍:Thread类的常用方

45、法,参见类的常用方法,参见JDKAPI高等学校计算机应用人才培养系列教材5.42采用继承创建线程采用继承创建线程u该该方方法法比比较较简简单单,主主要要是是通通过过继继承承java.lang.Thread类类,并并覆覆盖盖Thread类类的的run()方方法法来来完完成成线线成成的的创创建建。Thread类类是是一一个个具具体体的的类类,即即不不是是抽抽象象类类,该该类类封封装装了了线线程程的的行行为为。要要创创建建一一个个线线程程,程程序序员员必必须须创创建建一一个个从从Thread类类导导出出的的新新类类。Thread类类中中有有两两个个最最重重要要的的函函数数run()和和start()

46、。高等学校计算机应用人才培养系列教材5.43publicclassMyThreadextendsThread/count变量用于统计打印的次数并共享变量变量用于统计打印的次数并共享变量privatestaticintcount=0;publicMyThread(Stringname)super(name);publicstaticvoidmain(Stringargs)/main方法开始方法开始MyThreadp=newMyThread(t1);/创建一个线程实例创建一个线程实例p.start();/执行线程执行线程/主线程主线程main方法执行一个循环方法执行一个循环for(inti=0;i

47、5;i+)count+;/主线程中打印主线程中打印count+“main”变量的值,并换行变量的值,并换行System.out.println(count+:main);u upublicvoidrun()publicvoidrun()u u/线程类必须有的线程类必须有的线程类必须有的线程类必须有的runrun()方法()方法()方法()方法u ufor(for(intinti=0;i5;i+)i=0;i5;i+)u ucount+;count+;u uSystem.out.printlnSystem.out.println(count+:+(count+:+this.getNamethis.

48、getName();();u u u u u u 高等学校计算机应用人才培养系列教材5.44u参见例子参见例子MyThread.java第1次运行:1:main2:main3:main4:main5:main6:t17:t18:t19:t110:t1高等学校计算机应用人才培养系列教材5.4510.2.1 通过实现接口创建线程通过实现接口创建线程 u该该方方法法通通过过生生成成实实现现java.lang.Runnable接接口口的的类类。该该接接口口只只定定义义了了一一个个方方法法run(),所所以以必必须须在在新新类类中中实实现现它它。但但是是Runnable接接口口并并没没有有任任何何对对线

49、线程程的的支支持持,我我们们还还必必须须创创建建Thread类类的的实实例例,这这一一点点通通过过Thread类类的的构构造造函函数数publicThread(Runnabletarget);来实现。来实现。下面是使用这一方法的示例程序:下面是使用这一方法的示例程序:高等学校计算机应用人才培养系列教材5.4610.2.1 通过实现接口创建线程通过实现接口创建线程publicclassMyThread2implementsRunnableintcount=1,number;publicMyThread2(inti)number=i;System.out.println(创建线程创建线程+number);publicvoidrun()while(true)System.out.println(“线程线程”+number+“计数计数+count);if(+count=3)return;高等学校计算机应用人才培养系列教材5.4710.2.1 通过实现接口创建线程通过实现接口创建线程publicstaticvoidmain(Stringargs)for(inti=0;i=100)trysleep(delay);acount.balance=acount.balance-100;System.out.println(withdraw100successful!);catch(Interrup

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁