1、实验报告实验四北 京 林 业 大 学2013 学年 2014 学年第 2学期 Java程序设计基础实验报告书专 业: 电子 班 级: 11-2 姓 名: 唐诗 学 号: 111114222 实验地点: 任课教师: 黄儒乐 实验题目:多线程的使用 实验环境: Windows2000/XP;局域网 实验要求:1. 对所有实验内容中涉及到的命令均要亲自实践,对照实验指导书进行。2. 把实验中出现的问题以及最后解决的情况反馈到实验报告中。3. 程序作业的源代码要求反馈到实验报告中。实验内容:1线程的状态按模板要求,将【代码1】【代码10】替换为Java程序代码。ThreadExample.javacl
2、ass Tortoise extends Thread int sleepTime=0,liveLength=0; Tortoise(int sleepTime,String name,int liveLength) this.sleepTime=sleepTime; this.liveLength=liveLength; 【代码1】 / 设置线程的名字为name public void run() while(true) liveLength-; System.out.printf(); try 【代码2】 / 让线程调用 sleep方法进入中断状态,sleepTime毫秒后线程/ 重新排队
3、,等待CPU资源 catch(InterruptedException e) if(liveLength=0) System.out.printf(getName()+进入死亡状态n); 【代码3】 / 结束run方法的语句 class Rabbit extends Thread int sleepTime=0,liveLength; Rabbit(int sleepTime,String name,int liveLength) this.sleepTime=sleepTime; this.liveLength=liveLength; 【代码4】 / 设置线程的名字为name public
4、void run() while(true) liveLength-; System.out.printf(*); try 【代码5】 / 让线程调用 sleep方法进入中断状态,sleepTime毫秒后/ 线程重新排队,等待CPU资源 catch(InterruptedException e) if(liveLength=6) System.out.printf(%s线程进入死亡状态n,zhang.getName(); 【代码8】 / 使得线程zhang进入死亡状态 try Thread.sleep(1000); catch(InterruptedException e) else if(【
5、代码9】) / 判断线程keven是否正在占有CPU资源 i=i-1; money=money-1; System.out.printf(n%s将money的值改为%dt,keven.getName(),money); System.out.printf(%s的局部变量i=%dn,keven.getName(),i); if(i=-6) System.out.printf(%s线程进入死亡状态n,keven.getName(); 【代码10】 / 使得线程keven进入死亡状态 try Thread.sleep(1000); catch(InterruptedException e) clas
6、s BankExample public static void main(String args ) Bank bank=new Bank(); bank.zhang.start(); bank.keven.start(); 3. 线程同步实验分析上面BankExample的输出,是否发现money数据输出有误,请将针对money值的操作写成一个同步方法,解决上述问题。实验目的:掌握两种线程创建的方法,掌握线程控制的基本方法。实现方法及结果1. ThreadExample.javaclass Tortoise extends Thread int sleepTime=0,liveLength
7、=0; Tortoise(int sleepTime,String name,int liveLength) this.sleepTime=sleepTime; this.liveLength=liveLength; setName(name); / 设置线程的名字为name public void run() while(true) liveLength-; System.out.print(); try sleep(sleepTime); / 让线程调用 sleep方法进入中断状态,sleepTime毫秒后线程/ 重新排队,等待CPU资源 catch(InterruptedExceptio
8、n e) if(liveLength=0) System.out.print(getName()+进入死亡状态n); stop(); / 结束run方法的语句 class Rabbit extends Thread int sleepTime=0,liveLength; Rabbit(int sleepTime,String name,int liveLength) this.sleepTime=sleepTime; this.liveLength=liveLength; setName(name); / 设置线程的名字为name public void run() while(true) l
9、iveLength-; System.out.print(*); try sleep(sleepTime); / 让线程调用 sleep方法进入中断状态,sleepTime毫秒后/ 线程重新排队,等待CPU资源 catch(InterruptedException e) if(liveLength5) System.out.print(zhang.getName()+线程进入死亡状态n); zhang.stop(); / 使得线程zhang进入死亡状态 try Thread.sleep(1000); catch(InterruptedException e) else if(keven.isA
10、live() / 判断线程keven是否正在占有CPU资源 i=i-1; money=money-1; System.out.print(keven.getName()+将money的值改为+money+n); System.out.print(keven.getName()+的局部变量i=+i+n); if(i=6) System.out.print(zhang.getName()+线程进入死亡状态n); zhang.stop(); / 使得线程zhang进入死亡状态 try Thread.sleep(1000); catch(InterruptedException e) else if(
11、keven.isAlive() / 判断线程keven是否正在占有CPU资源 i=i-1; money=money-1; System.out.print(keven.getName()+将money的值改为+money+n); System.out.print(keven.getName()+的局部变量i=+i+n); if(i=6,但是运行中money值一直给到110,远超过循环要实现的值,处理多线程时,当两个或多个线程同时访问同一个变量并且一个线程需要修改这个变量,可以讲一个方法用synchronized修饰,这样该方法在一个线程适合使用他时,别的线程就必须等待直到前一个使用完。在我的实验中,在cmd中运行有如下提示,但能正常运行。 、在网上查找后认为这应该是我使用Stop()方法引起的。并且同时发现老师给出模板里都是使用“System.out.printf(getName()+进入死亡状态n)”,但我在自己使用的电脑不是和教材配套的JRE和JDK,没次把模板复制过去,这些显示iyuju都无法通过,必须改成System.out.print(进入死亡状态+getName()+n)此类语句形式,也是由于Eclipse的版本问题引起的。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1