欢迎来到天天文库
浏览记录
ID:38630685
大小:68.00 KB
页数:10页
时间:2019-06-16
《并行计算实验报告一》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、江苏科技大学计算机科学与工程学院实验报告评定成绩指导教师宋英磊实验课程:并行计算实验名称:Java多线程编程学号:姓名:班级:完成日期:2014年04月22日1.1实验目的(1)掌握多线程编程的特点;(2)了解线程的调度和执行过程;(3) 掌握资源共享访问的实现方法。1.2知识要点1.2.1线程的概念(1) 线程是程序中的一个执行流,多线程则指多个执行流;(2) 线程是比进程更小的执行单位,一个进程包括多个线程;(3) Java语言中线程包括3部分:虚拟CPU、该CPU执行的代码及代码所操作的数据。(4) Java代码可以为不同线程共享,
2、数据也可以为不同线程共享;1.2.2线程的创建(1)方式1:实现Runnable接口Thread类使用一个实现Runnable接口的实例对象作为其构造方法的参数,该对象提供了run方法,启动Thread将执行该run方法;(2) 方式2:继承Thread类重写Thread类的run方法;1.2.3线程的调度(1)线程的优先级l 取值范围1~10,在Thread类提供了3个常量,MIN_PRIORITY=1、MAX_PRIORITY=10、NORM_PRIORITY=5;l 用setPriority()设置线程优先级,用getPr
3、iority()获取线程优先级;l 子线程继承父线程的优先级,主线程具有正常优先级。(2)线程的调度:采用抢占式调度策略,高优先级的线程优先执行,在Java中,系统按照优先级的级别设置不同的等待队列。1.2.4线程的状态与生命周期说明:新创建的线程处于“新建状态”,必须通过执行start()方法,让其进入到“就绪状态”,处于就绪状态的线程才有机会得到调度执行。线程在运行时也可能因资源等待或主动睡眠而放弃运行,进入“阻塞状态”,线程执行完毕,或主动执行stop方法将进入“终止状态”。1.2.5线程的同步--解决资源访问冲突问题(1)对象的加锁所有
4、被共享访问的数据及访问代码必须作为临界区,用synchronized加锁。对象的同步代码的执行过程如图14-2所示。synchronized关键字的使用方法有两种:l 用在对象前面限制一段代码的执行,表示执行该段代码必须取得对象锁。l 在方法前面,表示该方法为同步方法,执行该方法必须取得对象锁。(2)wait()和notify()方法用于解决多线程中对资源的访问控制问题。l wait()方法:释放对象锁,将线程进入等待唤醒队列;l notify()方法:唤醒等待资源锁的线程,让其进入对象锁的获取等待队列
5、。(3) 避免死锁指多个线程相互等待对方释放持有的锁,并且在得到对方锁之前不会释放自己的锁。1.3上机测试下列程序样例1:利用多线程编程编写一个龟兔赛跑程序。· 乌龟:速度慢,休息时间短;· 兔子:速度快,休息时间长;【参考程序1】字符方式下实现方案classAnimalextendsThread{ intspeed; //速度publicAnimal(Stringstr,intspeed){ super(str); //线程名用动物名代表 this.speed=speed; } publicvoidrun(){ intdistance
6、=0; intsleepTime; while(distance<=1000){ System.out.println(getName()+"isat"+distance); try{ distance+=speed; //每次跑的距离简单用速度计算 sleepTime=(int)(speed+Math.random()*speed);//速度快休息时间要长 sleep(sleepTime); }catch(InterruptedExceptione){} } }}publiccl
7、assRace{ publicstaticvoidmain(Stringarg[]){ Animala1,a2; a1=newAnimal("rabit",100); a2=newAnimal("turtle",20); a2.setPriority(Thread.MAX_PRIORITY);//让乌龟的运行优先级更高 a1.start(); a2.start(); }}【编程技巧】(1) 速度快,跑的距离增加也快,这里简单地将速度加到距离上,未考虑跑的时间;(2) 为了让乌龟得到更多的运行机会,采取两项措施
8、,一让线程的睡眠时间与速度成正比,二是让乌龟得到更高
此文档下载收益归作者所有