Java大学实用教程(第二版)实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.2.4 排队买票
4.程序模板 按模板要求,将【代码1】~【代码7】替换为Java程序代码。
SaleExample.java
package test1; class TicketSeller // 负责卖票的类 { int fiveNumber=1,tenNumber=0,twentyNumber=0; public synchronized void sellTicket(int receiveMoney,int buyNumber) { if(receiveMoney==5) { fiveNumber=fiveNumber+1; System.out.printf("\n%s给我5元钱,这是您的1张入场 卷",Thread.currentThread().getName()); } else if(receiveMoney==10&&buyNumber==2)
作",boss.getName(),wangWorker.getName()); } } } else if(Thread.currentThread()==boss) { while(true) { zhangWorker.interrupt(); //【代码6】 // 吵醒 zhangWorker wangWorker.interrupt(); //【代码7】 // 吵醒wangWorker if(!(wangWorker.isAlive()||zhangWorker.isAlive())) { System.out.printf("%n%s下班",boss.getName()); return; } } } } } class ShopExample { public static void main(String args[]) { Shop1 shop=new Shop1(); shop.zhangWorker.start(); shop.wangWorker.start(); shop.boss.start(); } }
8.2.2 使用RannabLeabharlann Baidue接口
4.程序模板 按模板要求,将【代码1】~【代码10】替换为Java程序代码。
BankExample.java
class Bank implements Runnable { int money=100;//【代码1】 // 声明一个int型变量money,初 值为100 Thread zhang,keven; Bank() { zhang = new Thread(this); //【代码2】 // 创建zhang,Bank 对象为zhang的目标对象 zhang.setName(“会计”); //【代码3】 // 设置zhang线程的名 字为“会计” keven = new Thread(this); //【代码4】 // 创建keven,Bank 对象为keven的目标对象 keven.setName(“出纳”); //【代码5】 // 设置keven线程的名 字为“出纳” } public void run() { int i = 0; //【代码6】 // 声明一个int类型变量i,初值为0 while(true) { if(zhang.isAlive()) // 判断线程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进入死亡状态 }
{ tenNumber=tenNumber+1; System.out.printf("\n%s给我10元钱,这是您的2张入场 卷",Thread.currentThread().getName()); } else if(receiveMoney==10&&buyNumber==1) { while(fiveNumber<1) //【代码1】// 给出线程需等待的条件 { try { System.out.printf("\n%30s靠边 等",Thread.currentThread().getName()); wait(); //【代码2】 // 线程进入等待状态 System.out.printf("\n%30s结束等待 \n",Thread.currentThread().getName()); } catch(InterruptedException e) { } } fiveNumber=fiveNumber-1; tenNumber=tenNumber+1; System.out.printf("\n%s给我10元钱,找您5元,这是您的1张入 场卷",Thread.currentThread().getName()); } else if(receiveMoney==20&&buyNumber==1) { while(fiveNumber<1||tenNumber<1) //【代码3】// 给出线程需等 待的条件 { try { System.out.printf("\n%30s靠边 等",Thread.currentThread().getName()); wait();//【代码4】 // 线程进入等待状态 System.out.printf("\n%30s结束等 待",Thread.currentThread().getName());
Bank bank=new Bank(); bank.zhang.start(); bank.keven.start(); } }
8.2.3 吵醒休眠的线程
4.程序模板 按模板要求,将【代码1】~【代码7】替换为Java程序代码。
ShopExample.java
package test; class Shop1 implements Runnable { Thread zhangWorker,wangWorker,boss; Shop1() { boss=new Thread(this);//【代码1】 // 创建boss,Shop对象为boss目 标对象 zhangWorker= new Thread(this);//【代码2】 // 创建 zhangWorker,Shop对象为boss目标对象 wangWorker= new Thread(this);//【代码3】 // 创建wangWorker, Shop对象为boss目标对象 zhangWorker.setName("张工"); wangWorker.setName("王工"); boss.setName("老板"); } public void run() { int i=0;
System.out.printf(getName()+"进入死亡状态\n"); return; // 【代码6】 // 结束run方法的语句 } } } } public class ThreadExample { public static void main(String args[ ]) { Rabbit rabit; rabit= new Rabbit(100, "rabit", 100); //【代码7】 // 新 建线程rabit Tortoise tortoise; tortoise= new Tortoise(200, "tortoise", 200); //【代码8】 // 新建线程tortoise tortoise.start(); //【代码9】 // 启动线程tortoise rabit.start(); //【代码10】 // 启动线程rabit } }
try{ Thread.sleep(1000); } catch(InterruptedException e) { } } else if(keven.isAlive()) // 判断线程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 { public static void main(String args[ ]) {
Java大学实用教程(第二版)实验
8.2.1 线程的状态
4.程序模板
按模板要求,将【代码1】~【代码1】替换为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; setName(“name”); //【代码1】 // 设置线程的名字为 name } public void run() { while(true) { liveLength--; System.out.printf("@"); try { Thread.sleep(sleepTime); //【代码2】 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后线程 // 重新排队,等待CUP资源 } catch(InterruptedException e) {
} if(liveLength<=0) { System.out.printf(getName()+"进入死亡状态\n"); return; //【代码3】 // 结束run方法的语句 } } } } class Rabbit extends Thread { int sleepTime=0,liveLength; Rabbit(int sleepTime,String name,int liveLength) { this.sleepTime=sleepTime; this.liveLength=liveLength; setName(“name”); //【代码4】 // 设置线程的名字为 name } public void run() { while(true) { liveLength--; System.out.printf("*"); try { Thread.sleep(sleepTime); //【代码5】 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后 // 线程重新排队,等待CUP资源 } catch(InterruptedException e) { } if(liveLength<=0) {
if(Thread.currentThread()==zhangWorker) { while(true) { try{ i++; System.out.printf("\n%s已搬运了%d箱苹果 \n",zhangWorker.getName(),i); if(i==3) return; Thread.sleep(10000);//【代码4】 // 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; Thread.sleep(10000);//【代码5】 // wangWorker休眠10 秒(10000毫秒) } catch(InterruptedException e) { System.out.printf("\n%s让%s继续工