第8章Java高级编程.ppt
上传人:sy****28 上传时间:2024-09-14 格式:PPT 页数:70 大小:1.1MB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

第8章Java高级编程.ppt

第8章Java高级编程.ppt

预览

免费试读已结束,剩余 60 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第8章Java高级编程8.1异常处理2.系统定义的运行异常3.用户自定义的异常8.1.2抛出异常8.1.3异常的处理8.2Java多线程机制8.2.2Java的线程类与Runnable接口1.Runnable接口Runnable接口只有一个方法run(),所有实现Runnable接口的用户类都必须具体实现这个run()方法,为它书写方法体并定义具体操作。Runnable接口中的这个run()方法是一个较特殊的方法,它可以被运行系统自动识别和执行。具体地说,当线程被调度并转入运行状态时,它所执行的就是run()方法中规定的操作。所以,一个实现了Runnable接口的类实际上定义了一个主线程之外的新线程的操作,而定义新线程的操作和执行流程,是实现多线程应用的最主要和最基本的工作之一。2.Thread类Thread类综合了Java程序中一个线程需要拥有的属性和方法,主要有:(1)构造函数Thread类的构造函数有多个,所对应的操作有如下三种。①publicThread():创建一个系统线程类的对象。②publicThread(Runnabletarget):在上一个构造函数完成的操作——创建线程对象的基础之上,利用参数对象——实现了Runnable接口的target对象中所定义的run()方法,来初始化或覆盖新创建的线程对象的run()方法。③publicThread(StringThreadName):在第一个构造函数工作的基础上,为所创建的线程对象指定一个字符串名称供以后使用。④publicThread(Runnabletarget,StringThreadName):实现②,③两构造函数的功能。(3)其他主要方法①启动线程的start()方法:start()方法将启动线程对象,使之从新建状态转入就绪状态并进入就绪队列排队。②定义线程操作的run()方法:Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,也都是系统自动调用而用户程序不得引用的方法。系统的Thread类中,run()方法没有具体内容,所以用户程序需要创建自己的Thread类的子类,并定义新的run()方法来覆盖原来的run()方法。③使线程暂时休眠的sleep()方法:优先级高的线程可以在它的run()方法中调用sleep()方法来使自己放弃处理器资源,休眠一段时间。休眠时间的长短由sleep()方法的参数决定。sleep(intmillsecond);//millsecond是以毫秒为单位的休眠时间sleep(intmillsecond,intnanosecond);//nanosecond是以纳秒为单位的休眠时间④判断线程是否未消亡的isAlive()方法:在调用stop()方法终止一个线程之前,最好先用isAlive()方法检查一下该线程是否仍然存活,杀死不存在的线程可能会造成系统错误。8.2.3如何在程序中实现多线程如前所述,在程序中实现多线程有两个途径:创建Thread类的子类或实现Runnable接口。无论采用哪种途径,程序员可以控制的关键性操作有两个:(1)定义用户线程的操作,即定义用户线程的run()方法;(2)在适当时候建立用户线程实例。1.创建Thread类的子类在这个途径中,用户程序需要创建自己的Thread类的子类,并在子类中重新定义自己的run()方法,这个run()方法中包含了用户线程的操作。这样在用户程序需要建立自己的线程时,它只需要创建一个已定义好的Thread子类的实例就可以了。例8-3TestThread.java图8.4例8-3的运行结果2.实现Runnable接口在这个途径中,已经有了一个父类的用户类可以通过实现Runnable接口的方法来定义用户线程的操作。我们知道,Runnable接口只有一个方法run(),实现这个接口,就必须要定义run()方法的具体内容,用户新建线程的操作也由这个方法来决定。1:importjava.applet.Applet;2:importjava.awt.*;3:publicclassTestRunnableextendsAppletimplementsRunnable//JavaApplet主类4:{5:Labelprompt1=newLabel(″第一个子线程″);//标签16:Labelprompt2=newLabel(″第二个子线程″);//标签27:TextFieldthreadFirst=newTextField(14);//文本框18:TextFi