版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏科技大学计算机科学与工程学院实验报告实验课程:并行计算评估成绩指导教师实验名称:Java多线程编程宋英磊学号:姓名:班级:完毕日期:2023年()4月22日classMyLabelextendsLabe1implementsRunnable{intvalue;oboo1eanstop=false;publicMyLabel(){super("number");value=0;)opublicvoidrun(){for(:;){ova1ue=(int)(Math.random()*10);//产生一个0到9的数字setText(Integer.toString(va1ue));。try(oThread.s1eep(500):。}ocatch(InterruptedExceptione){}0if(Stop)//停止标记为true,退出循环,结束运营obreak;°}0)0}}【编程技巧】(1)将每个标签定义为线程方式运营,在运营中运用随机数产生数字显示。(2)线程体为一个循环语句,只有当stop标记变量为true,则停止;(3)主程序中将所有标签定义存入一个数组,这样可以方便地对其进行控制,例如,在点击“停止”按钮时将所有标签对象的stop属性值设立为trueo4上机完毕编程任务任务描述:完毕下列编程任务,并将代码与实验报告一起交给教师。令基本题(必做)1)编写一个可变颜色的标签,用—个按钮控制颜色的改变与停止。点击按钮颜色停止变化,再点击该按钮颜色乂变化。颜色的变化可用随机数拟定。2)有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表达,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。3)编写一个图片播放程序,图片的文献名为fiIcOLjpg,file02.jpg,…filen.jpg,其中n由命令行输入,规定用多线程自动播放。令提高题(选做其中一个)1)编制一个秒针计时器,在画面包含一个文本框,显示秒针值,安排一个“开始”和“结束”按钮,点击“开始”按钮则开始计时,点击“结束”停止计时。时间的拟定可借助日历对象实例方法实现,用get(Calendar.SEC0ND)方法得到秒值,用get(Calendar.MINUTE)方法得到分值,用get(Calendar.HOUR)方法得到小时值。计算从“开始”到“当前”的时间差即可拟定花费的秒数。【进一步思考】如何将秒针计时器设计为图形界面,绘制一个圆形秒表,秒表的一圈为60秒,根据花费的时间显示秒针的变化。2)编写生产者/消费者问题的应用程序。生产者以0〜200ms的速度随机产生30个小写字母,消费者以0~2s的速度取出字母,并显示在屏幕上。3)运用多线程求解某范围素数,每个线程负责10000范围.线程1找1000—10000线程2找10001-20230线程3找20231-30000另开辟一线程专门接受其他线程发送给它的数据(创建管道输入输出流),直到3个线程发送的数据均结束(结束标记)为止,接受的数据以文本形式写入到文献xyz.dat中。5思考题(必做)任务描述:完毕实验后,完毕下列多选题1)什么因素可导致线程停止执行。A.有更高优先级的线程开始执行;B.线程调用了wait()方法;C.线程调用了yield0方法:0.线程调用了pause()方法;E.线程调用了sleep()方法。2)哪个方法是实现Runnable接I」所需的?A.wait()B.run()C.stop()D.update()E.resume()3)以下代码的调试结果为?publicclassBgroundextendsThread(publicstaticvoidmain(Stringargv[]){aBgroundb=newBground0;4b.run();)Apublicvoidstart(){afor(inti=0;i<10;i++){System.out.print1nC^Valueofi="+i);A.编译错误,没有定义线程的run方法;B.由于没有定义线程的run方法,而出现运营错误;aC.编译通过,运营输出values0to9aD.编译通过,运营无输出4)有关线程的叙述对的的有:A.通过继承Thread类或实现Runnab1e接口,可以获得对类中方法的互斥锁定。B.可以获得对任何对象的互斥锁定。C.线程通过调用对象的synchronized方法可取得对象的互斥锁定。D.线程调度算法是平台独立的。5)以下哪个是线程类的方法?yie1d()s1eep(longmsec)-*C.go()D.stopO6)以下哪个最准确描述synchronized关键字?A.允许两线程并行运营,并且互相通信;B.保证在某时刻只有一个线程可访问方法或对象;C.保证允许两个或更多解决同时开始和结束;I).保证两个或更多线程同时开始和结束。7实验总结实验目的(1)掌握多线程编程的特点;了解线程的调度和执行过程:掌握资源共享访问的实现方法。1.2知识要点1.2.1线程的概念(1)线程是程序中的一个执行流,多线程则指多个执行流;(2)线程是比进程更小的执行单位,一个进程涉及多个线程;Java语言中线程涉及3部分:虚拟CPU、该CPU执行的代码及代码所操作的数据。Java代码可认为不同线程共享,数据也可认为不同线程共享;2.2线程的创建(1)方式1:实现Runnable接口Thread类使用一个实现Runnab1e接II的实例对•象作为其构造方法的参数,该对象提供了run方法,启动Thread将执行该run方法;)方式2:继承Thread类重写Thread类的run方法;1.2.3线程的调度(1)线程的优先级取值范围门0,在Thread类提供了3个常量,MIN_PRIORITY=1、MAX_PRI0RITY=10、NORM_PRIORITY=5;用setPriority()设立线程优先级,用getPriority()获取线程优先级;子线程继承父线程的优先级,主线程具有正常优先级。(2)线程的调度:采用抢占式调度策略,高优先级的线程优先执行,在Java中,系统按照优先级的级别设立不同的等待队列。1.2.4线程的状态与生命周期图14-1线程的生命周期说明:新创建的线程处在“新建状态”,必须通过执行start()方法,让其进入到“就绪状态”,处在就绪状态的线程才有机会得到调度执行。线程在运营时也也许因资源等待或积极睡眠而放弃运营,进入“阻塞状态”,线程执行完毕,或积极执行stop方法将进入“终止状态”。2.5线程的同步一解决资源访问冲突问题(1)对象的加锁所有被共享访问的数据及访问代码必须作为临界区,用synchronized加锁。对象的同步代码的执行过程如图14-2所示。synchronized关键字的使用方法有两种:用在对象前面限制一段代码的执行,表达执行该段代码必须取得对象锁。在方法前面,表达该方法为同步方法,执行该方法必须取得对象锁。)wait()和notify0方法用于解决多线程中对资源的访问控制问题。wai1()方法:释放对象锁,将线程进入等待唤醒队列;nolify()方法:唤醒等待资源锁的线程,让其进入对象锁的获取等待队列。(3)避免死锁指多个线程互相等待对方释放持有的锁,并且在得到对方锁之前不会释放自己的锁。3上机测试下列程序样例1:运用多线程编程编写一个龟兔赛跑程序。•乌龟:速度慢,休息时间短;•兔子:速度快,休息时间长;【参考程序1】字符方式下实现方案classAnimalextendsThroad{intspeed;//速度pub1icAnimal(Stringstr,intspecd){super(str);〃线程名用动物名代表this.speed=speed;)publicvoidrun(){intdistance=0;intsleepTime;while(distancc<=1000)(System,out.print1n(getName()+"isat"+distanee);try(distance+=speed://每次跑的距离简朴用速度计算sleepTime=(int)(speed+Math.random()*speed);//速度快休息时间要长
s1eep(s1eepTime);}catch(InterruptedExceptione){})))pub1icclassRace{pub1icstaticvoidmain(Stringarg[])(a1=newAnima1("rabit",100);a2=ncwAnimal("turtie”,20);a2.setPriority(Thread.MAX.PRIORITY);//让乌龟的运营优先级更高a1.start();a2.start();))图14-3龟兔赛跑的图形方式运行界面图14-3龟兔赛跑的图形方式运行界面(1)速度快,跑的距离增长也快,这里简朴地将速度加到距离上,未考虑跑的时间;(2)为了让乌龟得到更多的运营机会,采用两项措施,一让线程的睡眠时间与速度成正比,二是让乌龟得到更高的优先级。【参考程序2]一图形方式下,图14-3为程序的运营演示。pub1icc1assrunnerextendsAppletimplementsRunnable{intBeginX=10,EndX=200;〃起点和终点的x坐标intRabbitX=BeginX,RabbitY=100;//兔子的起点intTortoiseX=BeginX,TortoiseY=200;〃乌龟的起点intRabbitRestTime=800,TortoiseRestTime=50;〃各自休息时间intRabbitSpeed=15,TortoiseSpeed=1;//各自速度intstate=0;//比赛状态,0代表比赛进行中,1代表兔子赢,2代表乌龟赢Thrcadrabbit;Threadtortoise;pub1icvoidinit(){rabbit=newThread(this,“rabbit");〃创建名为rabit的线程tortoise=newThread(this,ortoise");〃创建名为tortoise的线程)publicvoidpaint(Graphiesg){g.drawString("龟",TortoiseX,TortoiseY);g.drawString(〃兔〃,RabbitX,RabbitY);g.setCo1or(Color,red);for(intj=70;j<=230;j+=l0)g.drawstring(T,EndX+8,j);//绘制终点线g.setColor(Co1or.black);if(state==l)g.drawString(“兔子赢了!!“,250,300);elseif(state==2)g.drawString("乌龟赢了!!250,300);)publicvoidstart(){rabbit.start();
tortoise.start();)publicvoidrun(){StringcurrentRunning;whi1e(state==0){currentRunning=Thread.currentThread().getName();//得到当前线程的名程if(currentRunning.equa1s("rabbit*)){//是兔子try{Thread,s1eep((int)(Math,random()*RabbitRestTime));)catch(InterruptedExceptione){}RabbitX+=RabbitSpeed;if(RabbitX>EndX)RabbitX=EndX;}elseif(currentRunning.equals("lorloise"))(〃是乌龟try{Thread.s1eep((int)(Math.random()*TortoiseRestTime));)catch(InterruptedExceptione){}TortoiseX+=TortoiseSpeed;if(TortoiseX>EndX)TortoiseX=EndX;)if(RabbitX==EndX)state=l;elseif(TortoiscX==EndX)state=2;repaint();)))【编程技巧】(1)创建两个代表兔子和乌龟的线程,根据线程名决定各自的速度和休息时间。(2)根据是否到达终点决定state值的变化;(3)线程的run方法内的循环条件是state值为0。样例2:编写选号程序,在窗体中安排6个标签,每个标签上显示。〜9之间的一位数字,每位数字用一个线程控制其变化,点击“停止”按钮则所有标签数字停止变化。【参考程序】in^>ortjava,awt.*;importjava.awt.event.*;publicc1assMyFramee
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府协议采购制度
- 采购部管理审计制度汇编
- 信息化设备采购管理制度
- 标准化集中采购制度汇编
- 村级物品采购制度
- 书馆采购员制度
- 修理厂配件采购登记制度
- 采购部门内部轮岗制度
- 采购销售管理制度范本
- 采购需求论证管理制度
- 2025年税务局信息技术专员招聘考试题库
- 北师大版七年级数学下册-第一章-名校检测题【含答案】
- 【《汽车排气系统三维建模及有限元仿真分析》17000字(论文)】
- 急危重症快速识别与急救护理
- 2026年新高考数学专题复习 103.马尔科夫链讲义
- 初中数学备课教案模板
- 浙江建设监理管理办法
- 运输公司废物管理办法
- 水库安全度汛培训课件
- 2025年上海高二学业水平合格性考试信息技术试卷(含答案详解)
- 数字媒体艺术设计毕业设计
评论
0/150
提交评论