您好,欢迎访问三七文档
8.2.1线程的状态4.程序模板按模板要求,将【代码1】~【代码1】替换为Java程序代码。ThreadExample.javaclassTortoiseextendsThread{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】//新建线程rabitTortoisetortoise;tortoise=【代码8】//新建线程tortoise【代码9】//启动线程tortoise【代码10】//启动线程rabit}}8.2.2使用Rannable接口4.程序模板按模板要求,将【代码1】~【代码10】替换为Java程序代码。BankExample.javaclassBankimplementsRunnable{【代码1】//声明一个int型变量money,初值为100Threadzhang,keven;Bank(){【代码2】//创建zhang,Bank对象为zhang的目标对象【代码3】//设置zhang线程的名字为“会计”【代码4】//创建keven,Bank对象为keven的目标对象【代码5】//设置keven线程的名字为“出纳”}publicvoidrun(){【代码6】//声明一个int类型变量i,初值为0while(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.javaclassShopimplementsRunnable{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】//吵醒wangWorkerif(!(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.javaclassTicketSeller//负责卖票的类{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=
本文标题:Java线程的状态
链接地址:https://www.777doc.com/doc-2881372 .html