




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江苏科技大学 计算机科学与工程学院 实 验 报 告评定成绩指导教师宋英磊实验课程:并行计算实验名称:Java多线程编程学号: 姓名: 班级: 完成日期:2014年04月22日1.1 实验目的(1) 掌握多线程编程的特点;(2) 了解线程的调度和执行过程;(3) 掌握资源共享访问的实现方法。1.2 知识要点1.2.1线程的概念(1) 线程是程序中的一个执行流,多线程则指多个执行流;(2) 线程是比进程更小的执行单位,一个进程包括多个线程;(3) Java语言中线程包括3部分:虚拟CPU、该CPU执行的代码及代码所操作的数据。(4) Java代码可以为不同线程共享,数据也可以为不同线程共享;1.2
2、.2 线程的创建(1) 方式1:实现Runnable接口Thread类使用一个实现Runnable接口的实例对象作为其构造方法的参数,该对象提供了run方法,启动Thread将执行该run方法;(2) 方式2:继承Thread类重写Thread类的run方法;1.2.3 线程的调度(1) 线程的优先级l 取值范围110,在Thread类提供了3个常量,MIN_PRIORITY=1、MAX_ PRIORITY=10、NORM_PRIORITY=5;l 用setPriority()设置线程优先级,用getPriority()获取线程优先级;l 子线程继承父线程的优先级,主线程具有正常优先级。(2)
3、 线程的调度:采用抢占式调度策略,高优先级的线程优先执行,在Java中,系统按照优先级的级别设置不同的等待队列。1.2.4 线程的状态与生命周期说明:新创建的线程处于“新建状态”,必须通过执行start()方法,让其进入到“就绪状态”,处于就绪状态的线程才有机会得到调度执行。线程在运行时也可能因资源等待或主动睡眠而放弃运行,进入“阻塞状态”,线程执行完毕,或主动执行stop方法将进入“终止状态”。1.2.5 线程的同步-解决资源访问冲突问题(1) 对象的加锁所有被共享访问的数据及访问代码必须作为临界区,用synchronized加锁。对象的同步代码的执行过程如图14-2所示。synchroni
4、zed关键字的使用方法有两种: l 用在对象前面限制一段代码的执行,表示执行该段代码必须取得对象锁。l 在方法前面,表示该方法为同步方法,执行该方法必须取得对象锁。(2) wait()和notify()方法用于解决多线程中对资源的访问控制问题。l wait()方法:释放对象锁,将线程进入等待唤醒队列;l notify()方法:唤醒等待资源锁的线程,让其进入对象锁的获取等待队列。(3) 避免死锁指多个线程相互等待对方释放持有的锁,并且在得到对方锁之前不会释放自己的锁。1.3 上机测试下列程序样例1:利用多线程编程编写一个龟兔赛跑程序。 乌龟:速度慢,休息时间短; 兔子:速度快,休息时间长; 【参
5、考程序1】字符方式下实现方案class Animal extends Thread int speed; /速度public Animal( String str,int speed) super(str); /线程名用动物名代表 this.speed=speed; public void run() int distance=0; int sleepTime; while (distance=1000) System.out.println(getName()+is at+distance); try distance+=speed; /每次跑的距离简单用速度计算 sleepTime=(in
6、t)( speed+Math.random()*speed); /速度快休息时间要长 sleep(sleepTime); catch (InterruptedException e) public class Race public static void main(String arg) Animal a1, a2; a1=new Animal(rabit,100); a2=new Animal(turtle,20); a2.setPriority(Thread.MAX_PRIORITY); /让乌龟的运行优先级更高 a1.start(); a2.start(); 【编程技巧】(1) 速度快
7、,跑的距离增加也快,这里简单地将速度加到距离上,未考虑跑的时间;(2) 为了让乌龟得到更多的运行机会,采取两项措施,一让线程的睡眠时间与速度成正比,二是让乌龟得到更高的优先级。【参考程序2】图形方式下,图14-3为程序的运行演示。public class runner extends Applet implements Runnable int BeginX=10,EndX=200; /起点和终点的x坐标int RabbitX = BeginX,RabbitY=100; /兔子的起点int TortoiseX=BeginX, TortoiseY=200; /乌龟的起点int RabbitRes
8、tTime=800,TortoiseRestTime=50; /各自休息时间int RabbitSpeed=15,TortoiseSpeed=1; /各自速度int state=0; /比赛状态, 0代表比赛进行中,1代表兔子赢,2代表乌龟赢Thread rabbit;Thread tortoise;public void init() rabbit = new Thread(this,rabbit); /创建名为rabit的线程 tortoise = new Thread(this,tortoise); /创建名为tortoise的线程 public void paint(Graphics
9、g) g.drawString(龟,TortoiseX,TortoiseY); g.drawString(兔,RabbitX,RabbitY); g.setColor(Color.red); for(int j=70;jEndX) RabbitX=EndX; else if(currentRunning.equals(tortoise) /是乌龟try Thread.sleep(int)(Math.random()*TortoiseRestTime); catch(InterruptedException e) TortoiseX+=TortoiseSpeed; if(TortoiseX En
10、dX) TortoiseX=EndX; if (RabbitX = EndX) state=1; else if ( TortoiseX = EndX) state=2; repaint(); 【编程技巧】(1) 创建两个代表兔子和乌龟的线程,根据线程名决定各自的速度和休息时间。(2) 根据是否到达终点决定state值的变化;(3) 线程的run方法内的循环条件是state值为0。样例2:编写选号程序,在窗体中安排6个标签,每个标签上显示09之间的一位数字,每位数字用一个线程控制其变化,点击“停止”按钮则所有标签数字停止变化。【参考程序】import java.awt.*;import jav
11、a.awt.event.*; public class MyFrame extends Frame MyLabel x=new MyLabel6; /安排6个标签,每个标签显示1个数字 Button control; public MyFrame(String title) super(title); Panel disp=new Panel(); disp.setLayout(new FlowLayout(); for (int i=0;i6;i+ ) xi=new MyLabel(); disp.add(xi); new Thread(xi).start(); add(Center,dis
12、p); control=new Button(停止); add(North,control); pack(); setVisible(true); control.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) for(int i=0;i6;i+) xi.stop=true; ); public static void main(String args) new MyFrame(Test); class MyLabel extends Label implements Runna
13、ble int value; boolean stop=false; public MyLabel() super(number); value=0; public void run() for (; ; ) value=(int)(Math.random()*10); /产生一个0到9的数字 setText(Integer.toString(value); try Thread.sleep(500); catch (InterruptedException e) if (stop) /停止标记为true,退出循环,结束运行 break; 【编程技巧】(1) 将每个标签定义为线程方式运行,在运
14、行中利用随机数产生数字显示。(2) 线程体为一个循环语句,只有当stop标记变量为true,则停止;(3) 主程序中将所有标签定义存入一个数组,这样可以方便地对其进行控制,例如,在点击“停止”按钮时将所有标签对象的stop属性值设置为true。1.4 上机完成编程任务任务描述:完成下列编程任务,并将代码与实验报告一起交给教师。 基本题(必做)1)编写一个可变颜色的标签,用一个按钮控制颜色的改变与停止。点击按钮颜色停止变化,再点击该按钮颜色又变化。颜色的变化可用随机数确定。2)有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示
15、,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。3)编写一个图片播放程序,图片的文件名为 file01.jpg,file02.jpg,filen.jpg, 其中n由命令行输入,要求用多线程自动播放。 提高题(选做其中一个)1)编制一个秒针计时器,在画面包含一个文本框,显示秒针值,安排一个“开始”和“结束”按钮,点击“开始”按钮则开始计时,点击“结束”停止计时。时间的确定可借助日历对象实例方法实现,用get(Calendar.SECOND)方法得到秒值,用get(Calendar.MINUTE)方法得到分值,用get(Calendar.HOUR)方法得到小时值。计算从“开始”到“当前”的时间
16、差即可确定花费的秒数。【进一步思考】如何将秒针计时器设计为图形界面,绘制一个圆形秒表,秒表的一圈为60秒,根据花费的时间显示秒针的变化。2) 编写生产者/消费者问题的应用程序。生产者以0200ms的速度随机产生30个小写字母,消费者以02s的速度取出字母,并显示在屏幕上。3)利用多线程求解某范围素数,每个线程负责10000范围. 线程1找1000-10000 线程2找10001-20000 线程3找20001-30000 另开辟一线程专门接收其他线程发送给它的数据(创建管道输入输出流),直到3个线程发送的数据均结束(结束标记)为止,接受的数据以文本形式写入到文件xyz.dat中。1.5 思考题
17、(必做)任务描述:完成实验后,完成下列多选题1)什么原因可导致线程停止执行。A有更高优先级的线程开始执行;B线程调用了 wait()方法;C线程调用了yield()方法;D线程调用了 pause()方法;E线程调用了 sleep() 方法。2)哪个方法是实现Runnable接口所需的?Await() Brun() Cstop()Dupdate() Eresume()3)以下代码的调试结果为?public class Bground extends Threadpublic static void main(String argv) Bground b = new Bground(); b.run();public void start() for (int i = 0; i 10; i+) System.out.println(Value of i = + i); A编译错误,没有定义线程的run方法;B由于没有定义线程的run方法,而出现运行错误;C. 编译通过,运行输出 values 0 to 9 D. 编译通过,运行无输出4) 有关线程的叙述正确的有:A通过继承Thread类或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业文化对市场影响的分析试题及答案
- 全面掌握:人力资源管理师考试试题及答案
- 第17课 彩虹的形成(教学设计)五年级科学上册同步高效课堂系列(冀人版)
- 教师资格证考试常识试题及答案
- 黑龙江省七台河市2025年初三下学期3月练习卷物理试题试卷含解析
- 黑龙江省佳木斯市建三江一中2025年高三下学期防疫期间“停课不停学”网上周考(二)化学试题含解析
- 黑龙江省双鸭山市第三十一中学2024-2025学年高考数学试题冲刺试题含解析
- 黑龙江省哈尔滨市实验中学2024-2025学年高三英语试题模拟试题含解析
- 黑龙江省哈尔滨市高中名校2025年高三3月份第一次模拟考试物理试题试卷含解析
- 黑龙江省大庆市一中2024-2025学年高三阶段性测试(二)数学试题B卷含解析
- 人教PEP版英语五年级下册全册教案
- 基础护理学试题及标准答案
- 2025年四川成都市蒲江乡村建设发展集团有限公司招聘笔试参考题库附带答案详解
- 2024版房产经纪人无底薪劳动协议
- 2025年上半年度交通运输部南海航海保障中心公开招聘126人工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 社戒社康培训
- 招聘团队管理
- 船舶建造流程
- 低氧血症护理查房
- 小学一年级数学20以内的口算题(可直接打印A4)
- 但丁神曲课件教学课件
评论
0/150
提交评论