北 京 林 业 大 学
2013 学年— 2014 学年第 2学期 Java程序设计基础实验
报告书
专 业: 电子 班 级: 11-2 姓 名: 王云飞 学 号: 101114110 实验地点: 计算机中心 任课教师: 黄儒乐 实验题目:多线程的使用
实验环境: Windows2000/XP;局域网 实验要求:
1. 对所有实验内容中涉及到的命令均要亲自实践,对照实验指导书进行。 2. 把实验中出现的问题以及最后解决的情况反馈到实验报告中。 3. 程序作业的源代码要求反馈到实验报告中。
实验内容:
1.线程的状态
按模板要求,将【代码1】~【代码10】替换为Java程序代码。
ThreadExample.java
class 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毫秒后线程
// 重新排队,等待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 void run() {
while(true) {
liveLength--; System.out.printf(\ try {
【代码5】 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后
// 线程重新排队,等待CPU资源
}
catch(InterruptedException e) { }
if(liveLength<=0) {
System.out.printf(getName()+\进入死亡状态\\n\ 【代码6】 // 结束run方法的语句 } }
} }
public class ThreadExample {
public static void main(String args[ ]) {
Rabbit rabit;
rabit=【代码7】 // 新建线程rabit Tortoise tortoise;
tortoise=【代码8】 // 新建线程tortoise 【代码9】 // 启动线程tortoise 【代码10】 // 启动线程rabit } }
2.使用Runnable方法
按模板要求,将【代码1】~【代码10】替换为Java程序代码。
BankExample.java
class Bank implements Runnable {
【代码1】 // 声明一个int型变量money,初值为100 Thread zhang,keven; Bank() {
【代码2】 // 创建zhang,Bank对象为zhang的目标对象 【代码3】 // 设置zhang线程的名字为“会计”
【代码4】 // 创建keven,Bank对象为keven的目标对象 【代码5】 // 设置keven线程的名字为“出纳” }
public void run() {
【代码6】 // 声明一个int类型变量i,初值为0 while(true) {
if(【代码7】) // 判断线程zhang是否正在占有CPU资源 { i=i+1;
money=money+1;
System.out.printf(\将money的值改为%d\\t\ System.out.printf(\的局部变量i=%d\\n\ if(i>=6) {
System.out.printf(\线程进入死亡状态\\n\ 【代码8】 // 使得线程zhang进入死亡状态
} try{
Thread.sleep(1000); }
catch(InterruptedException e) { } }
else if(【代码9】) // 判断线程keven是否正在占有CPU资源 { i=i-1;
money=money-1;
System.out.printf(\将money的值改为%d\\t\ System.out.printf(\的局部变量i=%d\\n\ if(i<=-6) {
System.out.printf(\线程进入死亡状态\\n\ 【代码10】 // 使得线程keven进入死亡状态 } try{
Thread.sleep(1000); }
catch(InterruptedException e) { } } } } }
class BankExample {
public static void main(String args[ ]) {
Bank bank=new Bank(); bank.zhang.start(); bank.keven.start(); } }
3. 线程同步实验
分析上面BankExample的输出,是否发现money数据输出有误,请将针对money值得操作写成一个同步方法,解决上述问题。
实验目的:
掌握两种线程创建的方法,掌握线程控制的基本方法。
相关推荐: