还剩2页未读,继续阅读
文本内容:
Java网络编程实验报告实验六羊号姓名:实验项目名称多线程教师评分
一、实验目的了解线程的概念1学习简单的多线程编程2
二、预习内容及要求要求写出预习内容进程和线程的概念
1.进程是程序一次动态执行的过程,对应从代码加载、执行到执行结束这样一个完整的过程,也是进
2.程自身从产生、发展到消亡的过程线程是比进程更小的执行单元,一个进程在执行过程中,可以产生多个线程每个线程都有自身的
3.产生、执行和消亡的过程线程的状态与生命周期
4.•新建当一个类或其子类的对象被声明并创建时,新生的线程对象处于新建状态此时它Thread已经有了相应的内存空间和其他资源•运行线程创建之后就具备了运行的条件,一旦轮到它来享用资源时,即将使用CPU JVMCPU权切换给该线程时,此线程的就可以脱离创建它的主线程独立开始自己的生命周期了即方法run执行的过程中断有种原因的中断,资源从当前线程切换给其他线程、执行了方法、
5.4CPU sleepint millsecond执行了方法、进入阻塞状态wait死亡:方法结束
6.run线程的创建
7.在语言中,与线程支持密切相关的是类和接口接口定义很简单,只有一个方法Java Runnable run任何一个类如果希望自己的实例能够以线程的形式执行,都可以来实现接口°Runnable继承类和实现接口,都可以用来创建对象,效果上并没有什么不同继承Thread RunnableThread Thread类的方法很明显的缺点就是这个类不能再继承其他的类了,而实现接口不会有这个麻烦Runnable另外,在继承类的代码中,其实就是指当前正在运行的线程对象,如果使用实现Thread thisRunnable接口的方式,要得到当前正在执行的线程,需要使用方法Thread.currentThread线程创建后仅仅是占有了内存资源,在管理的线程中还没有这个线程,此线程必须调用
8.JVM start方法从父类继承的方法通知这样就会知道又有一个新一个线程排队等候切换了JVM,JVM注意多次启动一个线程,或者启动一个已经运行的线程对象是非法的,会抛出
9.异常对象IllegalThreadStateException线程的优先级
10.同一时刻在等待队列中的线程会有很多个,它们各自任务的重要性有所不同为了加以区分,使工作安排和资源分配时间更为合理,每个线程可以被赋予不同的优先级,让任务比较急的线程拥有更高的优先级,从而更快地进入执行状态中提供了个等级的线程优先级,最低为最高为Java10Thread.MIN_PRIORITY=1,默认优先级为Thread.MAX_PRIORITY=10,Thread.NORM_PRIORITY=5o使用类中的方法可以为线程指定优先级Thread setPriorityint线程的常用方法
11.方法•start线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用资源•CPU时,就可以脱离创建它的线程独立开始自己的生命周期了方法run类的方法与接口中的方法的功能和作用相同,都用来定义线程对象被•Thread runRunnablerun调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法系统的类中,Thread run方法没有具体内容,所以用户程序需要创建自己的类的子类,并重写方法来覆盖原Thread run来的方法当方法执行完毕,线程就变成死亡状态run run方法sleepintmillsecond现程占有期间,执行方法来使自己放弃资源,休眠一段时间休眠时间的长短由•CPU sleepCPU方法的参数决定,是毫秒为单位的休眠时间如果线程在休眠时被打断,就抛sleep millsecondJVM出异常因此,必须在语句块中调用方法InterruptedException try〜catch sleep方法isAlive线程处于“新建”状态时,线程调用方法返回当一个线程调用方法,并占•isAlive falseostart有资源后,该线程的方法就开始运行,在线程的方法结束之前,即没有进入死亡状CPU runrun态之前,线程调用方法返回当线程进入“死亡”状态后实体内存被释放,线程仍isAlive trueo可以调用方法这时返回的值是isAlive,false一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体,由于线程只能引用最后分•配的实体,先前的实体就会成为“垃圾”,并且不会被垃圾收集机收集掉方法currentThread方法是类中的类方法,可以用类名调用,该方法返回当前正在使用资•currentThread ThreadCPU源的线程方法
12.interrupt方法经常用来“吵醒休眠的线程当一些线程调用方法处于休眠状态时,一个占
13.intertupt sleep有资源的线程可以让休眠的线程调用方法“吵醒”自己CPU interrupt线程的同步
14.线程同步是指几个线程都需要调用一个同步方法使用关键字修饰的方法synchronized•当一个线程使用一个修饰的方法时,其他线程想使用这个方法时就必须等待,直到A synchronized线程使用完该方法除非线程使用主动让出资源A Await CPU•一个线程在使用的同步方法中时,可能根据问题的需要,必须使用方法使本线程等待,暂时wait让出的使用权,并允许其它线程使用这个同步方法其它线程如果在使用这个同步方法时如CPU果不需要等待,那么它用完这个同步方法的同时,应当执行方法通知所有的由于使用这notifyAll个同步方法而处于等待的线程结束等待•挂起•有时候两个线程并不是同步的,即不涉及都需要调用一个同步方法,但线程也可能需要暂时的挂起所谓挂起一个线程就是让线程暂时让出的使用权限,暂时停止执行,但停止执行的持续时间CPU不确定,因此不能使用方法暂停线程挂起一个线程需使用方法,即让准备挂起的线程sleep wait调用方法,主动让出的使用权限.wait CPU•恢复为了恢复该线程,其它线程在占有资源期间,让挂起的线程的目标对象执行方法,使得挂CUP notifyAHO起的线程继续执行;如果线程没有目标对象,为了恢复该线程,其它线程在占有资源期间,让挂CUP起的线程调用方法,使挂起的线程继续执行notifyAll
三、实验内容、操作过程及实验结果记录
1.输入下面的Jav.Application程序,运行该程序,并简要分析程序的运行结果class SimpleThreadextends Thread{public SimpleThreadStringstr{superstr;//强耳其俎的沱言方法public voidrun{//至笃run方法for inti=0;i10;i++{System.out.printIni++getName;//打年次宝定践程的名字try{steepint Math.random*1000;//践亘造运,把空用我交出去}catch InterruptedExceptione{System.out.printlnDONE!+getName;//殴程执行港东public class四触版阚移{public staticvoid mainStringargs[]{new SimpleThread11Firstn.start;//第一个践程的名字为Firstnew SimpleThreadnSecondn.start;//第二个技程的名字分Second}
2.编写程序,将上面多线程程序用Runnable接口来实现
3.编写一个创建三个线程对象的程序每个线程应该输出一则消息,并在消息后紧跟字符串“消息结束”在线程输出消息后,应暂停一秒钟,然后才输出“消息结束”首先应该有线程1输出消息,然后是线程2和线程
3.提示创建一个类Callme,其中包含call方法此方法输出消息后暂停1秒,然后输出“消息结束”创建一个类Caller,这个类是一个线程类,要求继承Runnable接口,并实现run方法创建一个具有main方法的类,此方法中将启动三个Caller线程使用同步机制控制三个Caller线程对象分别调用Callme对象的call方法
四、实验过程中所遇问题思考与讨论可写个人体会,或相关理论知识,根据个人具体情况选做。
个人认证
优秀文档
获得点赞 0