



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java网络编程实验报告(实验六)学号:姓名:实验项目名称:多线程教师评分:一、实验目的(1)了解线程的概念。(2)学习简单的多线程编程。二、预习内容及要求(要求写出预习内容)进程和线程的概念进程是程序一次动态执行的过程,对应从代码加载、执行到执行结束这样一个完整的过程,也是进程自身从产生、发展到消亡的过程。线程是比进程更小的执行单元,一个进程在执行过程中,可以产生多个线程。每个线程都有自身的产生、执行和消亡的过程。线程的状态与生命周期新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源。运行:线程创建之后就具备了运行的条件,一旦轮到它来享用CPU资源时,即JVM将CPU使用权切换给该线程时,此线程的就可以脱离创建它的主线程独立开始自己的生命周期了(即run方法执行的过程)。中断:有4种原因的中断,CPU资源从当前线程切换给其他线程、执行了sleep(intmillsecond)方法、执行了wait()方法、进入阻塞状态。死亡:run方法结束。线程的创建在Java语言中,与线程支持密切相关的是java.lang.Thread类和java.lang.Runnable接口。Runnable接口定义很简单,只有一个run方法。任何一个类如果希望自己的实例能够以线程的形式执行,都可以来实现Runnable接口。继承Thread类和实现Runnable接口,都可以用来创建Thread对象,效果上并没有什么不同。继承Thread类的方法很明显的缺点就是这个类不能再继承其他的类了,而实现Runnable接口不会有这个麻烦。另外,在继承Thread类的代码中,this其实就是指当前正在运行的线程对象,如果使用实现Runnable接口的方式,要得到当前正在执行的线程,需要使用Thread.currentThread()方法。线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有这个线程,此线程必须调用start()方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新一个线程排队等候切换了。注意:多次启动一个线程,或者启动一个已经运行的线程对象是非法的,会抛出IllegalThreadStateException异常对象。线程的优先级同一时刻在等待队列中的线程会有很多个,它们各自任务的重要性有所不同。为了加以区分,使工作安排和资源分配时间更为合理,每个线程可以被赋予不同的优先级,让任务比较急的线程拥有更高的优先级,从而更快地进入执行状态。Java中提供了10个等级的线程优先级,最低为Thread.MIN_PRIORITY=1,最高为Thread.MAX_PRIORITY=10,默认优先级为Thread.NORM_PRIORITY=5。使用Thread类中的setPriority(int)方法可以为线程指定优先级。线程的常用方法start()方法:线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命周期了。run()方法:Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法。系统的Thread类中,run()方法没有具体内容,所以用户程序需要创建自己的Thread类的子类,并重写run()方法来覆盖原来的run()方法。当run方法执行完毕,线程就变成死亡状态。sleep(intmillsecond)方法:现程占有CPU期间,执行sleep方法来使自己放弃CPU资源,休眠一段时间。休眠时间的长短由sleep方法的参数决定,millsecond是毫秒为单位的休眠时间。如果线程在休眠时被打断,JVM就抛出InterruptedException异常。因此,必须在try~catch语句块中调用sleep方法。isAlive()方法:线程处于“新建”状态时,线程调用isAlive()方法返回false。当一个线程调用start()方法,并占有CPU资源后,该线程的run方法就开始运行,在线程的run方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true。当线程进入“死亡”状态后(实体内存被释放),线程仍可以调用方法isAlive(),这时返回的值是false。一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体,由于线程只能引用最后分配的实体,先前的实体就会成为“垃圾”,并且不会被垃圾收集机收集掉。currentThread()方法:currentThread()方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程。interrupt()方法:intertupt方法经常用来“吵醒”休眠的线程。当一些线程调用sleep方法处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程调用interrupt方法“吵醒”自己。线程的同步线程同步是指几个线程都需要调用一个同步方法(使用关键字synchronized修饰的方法)。当一个线程A使用一个synchronized修饰的方法时,其他线程想使用这个方法时就必须等待,直到线程A使用完该方法(除非线程A使用wait主动让出CPU资源)。一个线程在使用的同步方法中时,可能根据问题的需要,必须使用wait()方法使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时如果不需要等待,那么它用完这个同步方法的同时,应当执行notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。挂起:有时候两个线程并不是同步的,即不涉及都需要调用一个同步方法,但线程也可能需要暂时的挂起。所谓挂起一个线程就是让线程暂时让出CPU的使用权限,暂时停止执行,但停止执行的持续时间不确定,因此不能使用sleep方法暂停线程。挂起一个线程需使用wait方法,即让准备挂起的线程调用wait方法,主动让出CPU的使用权限.恢复:为了恢复该线程,其它线程在占有CUP资源期间,让挂起的线程的目标对象执行notifyAll()方法,使得挂起的线程继续执行;如果线程没有目标对象,为了恢复该线程,其它线程在占有CUP资源期间,让挂起的线程调用notifyAll()方法,使挂起的线程继续执行。三、实验内容、操作过程及实验结果记录1.输入下面的JavaApplication程序,运行该程序,并简要分析程序的运行结果。2.编写程序,将上面多线程程序用Runnable接口来实现。3.编写一个创建三个线程对象的程序。每个线程应该输出一则消息,并在消息后紧跟字符串“消息结束”。在线程输出消息后,应暂停一秒钟,然后才输出“消息结束”。首先应该有线程1输出消息,然后是线程2和线程3.提示: 创建一个类Callme,其中包含call方法。此方法输出消息后暂停1秒,然后输出“消息结束”。创建一个类Calle
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB13T 5142-2019 被动式超低能耗建筑用钢质复合防盗安全门通 用技术条件
- DB13T 2974-2019 信息系统集成服务资费评估指南
- 诊断学基础z考试试题及答案
- 浙江省自考试题及答案
- 醇酚的结构与化学性质18课件
- 浙江c级安全考试试题及答案
- 长城汽车5s考试试题及答案
- 赞同科技java面试题及答案
- 统编版2024-2025学年小升初语文专项冲刺复习试卷:字音字形字义(有答案)
- 人教版二年级下册数学第二单元拔尖检测卷(含答案)
- 植物保护通论重点复习题
- 儿童抽动障碍共患焦虑抑郁障碍诊治2025
- 道路监控系统培训课件
- 2025年湖北省新高考信息卷(三)物理试题及答题
- 2024年山东省初中学业水平考试语文试题(文字版-含答案)
- 2024-2025教科版一年级下册科学期末考试卷附参考答案 (三套)
- 高血压药的类型
- 2025-2030年力控玩具项目投资价值分析报告
- 家规家训课件
- 基于学校区域文化优势背景下的小学水墨画教学研究
- 设备欠款协议书范本
评论
0/150
提交评论