java 第八次实验线程问题 未交上
来源:互联网 发布:北斗神拳 崇明 岛 知乎 编辑:程序博客网 时间:2024/06/01 08:11
8.2.1 线程的状态
4.程序模板
按模板要求,将【代码1】~【代码1】替换为Java程序代码。
ThreadExample.java
class Tortoiseextends Thread
{
intsleepTime=0,liveLength=0;
Tortoise(int sleepTime,String name,int liveLength)
{
this.sleepTime=sleepTime;
this.liveLength=liveLength;
setName(name); //【代码1】 // 设置线程的名字为name
}
publicvoid run()
{
while(true)
{
liveLength--;
System.out.printf("@");
try
{
sleep(sleepTime);//【代码2】 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后线程
// 重新排队,等待CUP资源
}
catch(InterruptedException e)
{
}
if(liveLength<=0)
{
System.out.printf(getName()+"进入死亡状态\n");
return;//【代码3】 // 结束run方法的语句
}
}
}
}
class Rabbitextends Thread
{
intsleepTime=0,liveLength;
Rabbit(int sleepTime,String name,int liveLength)
{
this.sleepTime=sleepTime;
this.liveLength=liveLength;
setName(name);//【代码4】 // 设置线程的名字为name
}
publicvoid run()
{
while(true)
{
liveLength--;
System.out.printf("*");
try
{
sleep(sleepTime);// 【代码5】 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后
// 线程重新排队,等待CUP资源
}
catch(InterruptedException e)
{
}
if(liveLength<=0)
{
System.out.printf(getName()+"进入死亡状态\n");
return;//【代码6】 // 结束run方法的语句
}
}
}
}
class ThreadExample
{
publicstaticvoid main(String args[ ])
{
Rabbit rabit;
rabit=new Rabbit(4,"a",3);//【代码7】 // 新建线程rabit
Tortoise tortoise;
tortoise=new Tortoise(5,"b",6);//【代码8】 // 新建线程tortoise
rabit.start();//【代码9】 // 启动线程tortoise
tortoise.start();//【代码10】 // 启动线程rabit
}
}8.2.2 使用Rannable接口
4.程序模板
按模板要求,将【代码1】~【代码10】替换为Java程序代码。
BankExample.java
class Bankimplements Runnable
{
intmoney=100;//【代码1】 // 声明一个int型变量money,初值为100
Thread zhang,keven;
Bank()
{
zhang=new Thread();//【代码2】 // 创建zhang,Bank对象为zhang的目标对象
zhang.setName("会计");//【代码3】 // 设置zhang线程的名字为“会计”
keven=new Thread();//【代码4】 // 创建keven,Bank对象为keven的目标对象
keven.setName("出纳");//【代码5】 // 设置keven线程的名字为“出纳”
}
publicvoid run()
{
int i=0;// 【代码6】 // 声明一个int类型变量i,初值为0
while(true)
{
if(Thread.currentThread()==zhang)//【代码7】) // 判断线程zhang是否正在占有CUP资源
{
i=i+1;
money=money+1;
System.out.printf("\n%s将money的值改为%d\t",zhang.getName(),money);
System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);
if(i>=6)
{
System.out.printf("%s线程进入死亡状态\n",zhang.getName());
return;//【代码8】 // 使得线程zhang进入死亡状态
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
}
}
elseif(Thread.currentThread()==keven)//【代码9】) // 判断线程keven是否正在占有CUP资源
{
i=i-1;
money=money-1;
System.out.printf("\n%s将money的值改为%d\t",keven.getName(),money);
System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);
if(i<=-6)
{
System.out.printf("%s线程进入死亡状态\n",keven.getName());
return;//【代码10】 // 使得线程keven进入死亡状态
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
}
}
}
}
}
class BankExample
{
publicstaticvoid main(String args[ ])
{
Bank bank=new Bank();
bank.zhang.start();
bank.keven.start();
}
}
8.2.3 吵醒休眠的线程
4.程序模板
按模板要求,将【代码1】~【代码7】替换为Java程序代码。
ShopExample.java
class Shop implements Runnable
{
Thread zhangWorker,wangWorker,boss;
Shop()
{
Shop boss=new Shop(); // 创建boss,Shop对象为boss目标对象
zhangWorker=new Thread(boss); //创建zhangWorker,Shop对象为boss目标对象
wangWorker=new Thread(boss); //创建wangWorker,Shop对象为boss目标对象
zhangWorker.setName("张工");
wangWorker.setName("王工");
boss.setName("老板");
}
public void run()
{
int i=0;
if(Thread.currentThread()==zhangWorker)
{
while(true)
{
try{
i++;
System.out.printf("\n%s已搬运了%d箱苹果\n",zhangWorker.getName(),i);
if(i==3)
return;
try{Thread.sleep(1000);} // zhangWorker休眠10秒(10000毫秒)
}
catch(InterruptedException e)
{
System.out.printf("\n%s让%s继续工作", _
boss.getName(),zhangWorker.getName());
}
}
}
else if(Thread.currentThread()==wangWorker)
{
while(true)
{
try{
i++;
System.out.printf("\n%s已搬运了%d箱苹果\n",wangWorker.getName(),i);
if(i==3)
return;
try{Thread.sleep(100;0)} // wangWorker休眠10秒(10000毫秒)
}
catch(InterruptedException e)
{
System.out.printf("\n%s让%s继续工作", _
boss.getName(),wangWorker.getName());
}
}
}
else if(Thread.currentThread()==boss)
{
while(true)
{
zhangWorker.interrupt(); //吵醒zhangWorker
wangWorker.interrupt(); //吵醒wangWorker
if(!(wangWorker.isAlive()||zhangWorker.isAlive()))
{
System.out.printf("%n%s下班",boss.getName());
return;
}
}
}
}
}
class ShopExample
{
public static void main(String args[])
{
Shop shop=new Shop();
shop.zhangWorker.start();
shop.wangWorker.start();
shop.boss.start();
}
}
- java 第八次实验线程问题 未交上
- Java第八次实验要求
- 第八次实验任务
- 第八次实验任务
- 第八次上机实验
- 第八次上机实验
- 第八次实验任务
- 第八次上机实验
- 第八次实验任务
- 第八次上机实验
- 第八次实验
- 第八次上机实验
- 第八次实验任务
- 第八次实验
- 第八次上机实验
- 第八次上机实验
- 第八次实验任务
- 第八次实验任务
- C# Socket编程
- uva 12167 - Proving Equivalences(强连通缩点,4级)
- linux如何切换到root用户
- stm32f407 discovery ISP
- 【学习】C++(3) std list
- java 第八次实验线程问题 未交上
- Java 7新方法probeContentType的C#实现方式
- 【创业说】技术合伙人会盗取你的创业idea吗?
- 划线的几种方法
- Shell 正则表达式总结及其含义举例
- java基础知识点
- JavaSE线程笔记
- .NET:关于数据模型、领域模型和视图模型的一些思考
- usb串口代码