Java 线程的状态.docx
- 文档编号:8023845
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:16
- 大小:17.61KB
Java 线程的状态.docx
《Java 线程的状态.docx》由会员分享,可在线阅读,更多相关《Java 线程的状态.docx(16页珍藏版)》请在冰豆网上搜索。
Java线程的状态
8.2.1线程的状态
4.程序模板
按模板要求,将【代码1】~【代码1】替换为Java程序代码。
ThreadExample.java
classTortoiseextendsThread
{
intsleepTime=0,liveLength=0;
Tortoise(intsleepTime,Stringname,intliveLength)
{
this.sleepTime=sleepTime;
this.liveLength=liveLength;
【代码1】//设置线程的名字为name
}
publicvoidrun()
{
while(true)
{
liveLength--;
System.out.printf("@");
try
{
【代码2】//让线程调用sleep方法进入中断状态,sleepTime毫秒后线程
//重新排队,等待CUP资源
}
catch(InterruptedExceptione)
{
}
if(liveLength<=0)
{
System.out.printf(getName()+"进入死亡状态\n");
【代码3】//结束run方法的语句
}
}
}
}
classRabbitextendsThread
{
intsleepTime=0,liveLength;
Rabbit(intsleepTime,Stringname,intliveLength)
{
this.sleepTime=sleepTime;
this.liveLength=liveLength;
【代码4】//设置线程的名字为name
}
publicvoidrun()
{
while(true)
{
liveLength--;
System.out.printf("*");
try
{
【代码5】//让线程调用sleep方法进入中断状态,sleepTime毫秒后
//线程重新排队,等待CUP资源
}
catch(InterruptedExceptione)
{
}
if(liveLength<=0)
{
System.out.printf(getName()+"进入死亡状态\n");
【代码6】//结束run方法的语句
}
}
}
}
publicclassThreadExample
{
publicstaticvoidmain(Stringargs[])
{
Rabbitrabit;
rabit=【代码7】//新建线程rabit
Tortoisetortoise;
tortoise=【代码8】//新建线程tortoise
【代码9】//启动线程tortoise
【代码10】//启动线程rabit
}
}
8.2.2使用Rannable接口
4.程序模板
按模板要求,将【代码1】~【代码10】替换为Java程序代码。
BankExample.java
classBankimplementsRunnable
{
【代码1】//声明一个int型变量money,初值为100
Threadzhang,keven;
Bank()
{
【代码2】//创建zhang,Bank对象为zhang的目标对象
【代码3】//设置zhang线程的名字为“会计”
【代码4】//创建keven,Bank对象为keven的目标对象
【代码5】//设置keven线程的名字为“出纳”
}
publicvoidrun()
{
【代码6】//声明一个int类型变量i,初值为0
while(true)
{
if(【代码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());
【代码8】//使得线程zhang进入死亡状态
}
try{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
}
}
elseif(【代码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());
【代码10】//使得线程keven进入死亡状态
}
try{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
}
}
}
}
}
classBankExample
{
publicstaticvoidmain(Stringargs[])
{
Bankbank=newBank();
bank.zhang.start();
bank.keven.start();
}
}
8.2.3吵醒休眠的线程
4.程序模板
按模板要求,将【代码1】~【代码7】替换为Java程序代码。
ShopExample.java
classShopimplementsRunnable
{
ThreadzhangWorker,wangWorker,boss;
Shop()
{
【代码1】//创建boss,Shop对象为boss目标对象
【代码2】//创建zhangWorker,Shop对象为boss目标对象
【代码3】//创建wangWorker,Shop对象为boss目标对象
zhangWorker.setName("张工");
wangWorker.setName("王工");
boss.setName("老板");
}
publicvoidrun()
{
inti=0;
if(Thread.currentThread()==zhangWorker)
{
while(true)
{
try{
i++;
System.out.printf("\n%s已搬运了%d箱苹果\n",zhangWorker.getName(),i);
if(i==3)
return;
【代码4】//zhangWorker休眠10秒(10000毫秒)
}
catch(InterruptedExceptione)
{
System.out.printf("\n%s让%s继续工作",_
boss.getName(),zhangWorker.getName());
}
}
}
elseif(Thread.currentThread()==wangWorker)
{
while(true)
{
try{
i++;
System.out.printf("\n%s已搬运了%d箱苹果\n",wangWorker.getName(),i);
if(i==3)
return;
【代码5】//wangWorker休眠10秒(10000毫秒)
}
catch(InterruptedExceptione)
{
System.out.printf("\n%s让%s继续工作",_
boss.getName(),wangWorker.getName());
}
}
}
elseif(Thread.currentThread()==boss)
{
while(true)
{
【代码6】//吵醒zhangWorker
【代码7】//吵醒wangWorker
if(!
(wangWorker.isAlive()||zhangWorker.isAlive()))
{
System.out.printf("%n%s下班",boss.getName());
return;
}
}
}
}
}
classShopExample
{
publicstaticvoidmain(Stringargs[])
{
Shopshop=newShop();
shop.zhangWorker.start();
shop.wangWorker.start();
shop.boss.start();
}
}
8.2.4排队买票
4.程序模板
按模板要求,将【代码1】~【代码7】替换为Java程序代码。
SaleExample.java
classTicketSeller//负责卖票的类
{
intfiveNumber=1,tenNumber=0,twentyNumber=0;
publicsynchronizedvoidsellTicket(intreceiveMoney,intbuyNumber)
{
if(receiveMoney==5)
{
fiveNumber=fiveNumber+1;
System.out.printf("\n%s给我5元钱,这是您的1张入场卷",_
Thread.currentThread().getName());
}
elseif(receiveMoney==10&&buyNumber==2)
{
tenNumber=tenNumber+1;
System.out.printf("\n%s给我10元钱,这是您的2张入场卷",_
Thread.currentThread().getName());
}
elseif(receiveMoney==10&&buyNumber==1)
{
while(【代码1】)//给出线程需等待的条件
{
try{
System.out.printf("\n%30s靠边等",Thread.currentThread().getName());
【代码2】//线程进入等待状态
System.out.printf("\n%30s结束等待\n",Thread.currentThread().getName());
}
catch(InterruptedExceptione)
{
}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber+1;
System.out.printf("\n%s给我10元钱,找您5元,这是您的1张入场卷",_
Thread.currentThread().getName());
}
elseif(receiveMoney==20&&buyNumber==1)
{
while(【代码3】)//给出线程需等待的条件
{
try{
System.out.printf("\n%30s靠边等",Thread.currentThread().getName());
【代码4】//线程进入等待状态
System.out.printf("\n%30s结束等待",Thread.currentThread().getName());
}
catch(InterruptedExceptione)
{
}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber-1;
twentyNumber=twentyNumber+1;
System.out.printf("\n%s给20元钱,找您一张5元和一张10元,这是您的1张入场卷",_
Thread.currentThread().getName());
}
elseif(receiveMoney==20&&buyNumber==2)
{
while(【代码5】)//给出线程需等待的条件
{
try{
System.out.printf("\n%30s靠边等\n",Thread.currentThread().getName());
【代码6】//线程进入等待状态
System.out.printf("\n%30s结束等待",Thread.currentThread().getName());
}
catch(InterruptedExceptione)
{
}
}
tenNumber=tenNumber-1;
twentyNumber=twentyNumber+1;
System.out.printf("\n%s给20元钱,找您一张10元,这是您的2张入场卷",_
Thread.currentThread().getName());
}
【代码7】//通知等待的线程结束等待
}
}
classCinemaimplementsRunnable//实现Runnable接口的类
{
Threadzhao,qian,sun,li,zhou;//电影院中买票的线程
TicketSellerseller;//电影院的售票员
Cinema()
{
zhao=newThread(this);
qian=newThread(this);
sun=newThread(this);
li=newThread(this);
zhou=newThread(this);
zhao.setName("赵");
qian.setName("钱");
sun.setName("孙");
li.setName("李");
zhou.setName("周");
seller=newTicketSeller();
}
publicvoidrun()
{
if(Thread.currentThread()==zhao)
{
seller.sellTicket(20,2);
}
elseif(Thread.currentThread()==qian)
{
seller.sellTicket(20,1);
}
elseif(Thread.currentThread()==sun)
{
seller.sellTicket(10,1);
}
elseif(Thread.currentThread()==li)
{
seller.sellTicket(10,2);
}
elseif(Thread.currentThread()==zhou)
{
seller.sellTicket(5,1);
}
}
}
publicclassSaleExample
{
publicstaticvoidmain(Stringargs[])
{
Cinemacinema=newCinema();
cinema.zhao.start();
try
{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
}
cinema.qian.start();
try
{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
}
cinema.sun.start();
try
{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
}
cinema.li.start();
try
{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
}
cinema.zhou.start();
}
}
实验5线程联合
4.程序模板
按模板要求,将【代码1】~【代码1】替换为Java程序代码。
JoinExample.java
classJoinThreadimplementsRunnable
{
Thread运货司机,装运工,仓库管理员;
Stringstep[]={"打开车锁","把握方向盘","挂挡","踩油门","开车"};
JoinThread()
{
运货司机=newThread(this);
装运工=newThread(this);
仓库管理员=newThread(this);
运货司机.setName("运货司机");
装运工.setName("装运工");
仓库管理员.setName("仓库管理员");
}
publicvoidrun()
{
if(Thread.currentThread()==运货司机)
{
System.out.printf("\n%s等%s",运货司机.getName(),装运工.getName());
try{
【代码1】//占有CUP资源期间联合线程:
装运工
}
catch(InterruptedExceptione)
{
}
for(inti=0;i { System.out.printf("\n%s%s",运货司机.getName(),step[i]); try { 运货司机.sleep(500); } catch(InterruptedExceptionee) { } } } elseif(Thread.currentThread()==装运工) { System.out.printf("\n%s等%s",装运工.getName(),仓库管理员.getName()); try{ 【代码2】//占有CUP资源期间联合线程: 仓库管理员 } catch(InterruptedExceptione) { } for(inti=1;i<=10;i++) { System.out.printf("\n%s搬运第%d箱货物到货车",装运工.getName(),i); try { 装运工.sleep(1500); } catch(InterruptedExceptionee) { } } } elseif(Thread.currentThread()==仓库管理员) { for(inti=1;i<=5;i++) { System.out.printf("\n%s打开第%d道门",仓库管理员.getName(),i); try { 仓库管理员.sleep(1000); } catch(InterruptedExceptione) { } } } } } classJoinExample { publicstaticvoidmain(Stringargs[]) { JoinThreada=newJoinThread(); a.运货司机.start(); a.装运工.start(); a.仓库管理员.start(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 线程的状态 线程 状态