您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页设计性实验报告

设计性实验报告

来源:爱够旅游网


设计性实验报告

专业: 年级/班级: 2010—2011学年第二学期 课程名称 Java程序设计 指导教师 姓名 实验地点 项目名称

一、实验目的

让学生掌握怎样处理多线程中的同步问题,学会使用wait()、notify()和notify All()方法。

用多线程实现排队买票 学号 实验时间 实验类型 设计性

二、实验仪器或设备

一台兼容机

三、总体设计(设计原理、设计方案及流程等) 设计原理

模拟5个人排队买票。售票员只有1张五元的钱,电影票五元钱一张。五个人的排队顺序是:张王李赵孙。张拿1张二十元的人民币买2张票,王拿1张二十元的人民币买1张票,李拿1张十元的人民币买1张票,赵拿1张十元的人民币买2张票,孙拿1张五元的人民币买1张票。要求售票员按如下的顺序找赎:

二十元买2张票,找零:1张十元:不许找零:2张五元。

二十元买1张票,找零:1张十元,1张五元;不许找零:3张五元。 十元买1张票,找零:1张五元。

四、实验步骤(包括主要步骤、代码分析等)

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张入场券\else if(receiveMoney==10&&buyNumber==2){ tenNumber=tenNumber+1;

System.out.printf(\"\\n%s给我10元钱,这是您的2张入场券\else if(receiveMoney==10&&buyNumber==1){ while(fiveNumber<1){

try{System.out.printf(\"\\n%30s靠边等\wait();

System.out.printf(\"\\n%30s结束等待\\n\catch(InterruptedException e){} }

fiveNumber=fiveNumber-1; tenNumber=tenNumber+1;

System.out.printf(\"\\n%s给我10元钱,找您5元,这是您的1张入场券

1

\}

else if(receiveMoney==20&&buyNumber==1){ while(fiveNumber<1||tenNumber<1){

try{System.out.printf(\"\\n%30s靠边等\wait();

System.out.printf(\"\\n%30s结束等待\\n\catch(InterruptedException e){} }

fiveNumber=fiveNumber-1; tenNumber=tenNumber-1;

twentyNumber=twentyNumber+1;

System.out.printf(\"\\n%s给我20元钱,找您一张10元和一张5元,这是您的1张入场券\}

else if(receiveMoney==20&&buyNumber==2){ while(tenNumber<1){

try{System.out.printf(\"\\n%30s靠边等\wait();

System.out.printf(\"\\n%30s结束等待\\n\catch(InterruptedException e){} }

tenNumber=tenNumber-1;

twentyNumber=twentyNumber+1;

System.out.printf(\"\\n%s给我20元钱,找您一张10元,这是您的2张入场券\}

notify(); } }

class Cinema implements Runnable{ Thread zhao,qian,sun,li,zhou; TicketSeller seller; Cinema(){

zhao=new Thread(this); qian=new Thread(this); sun=new Thread(this); li=new Thread(this); zhou=new Thread(this); zhao.setName(\"赵\"); qian.setName(\"钱\"); sun.setName(\"孙\"); li.setName(\"李\"); zhou.setName(\"周\");

2

seller=new TicketSeller(); }

public void run(){

if(Thread.currentThread()==zhao) seller.sellTicket(20,2);

else if(Thread.currentThread()==qian) seller.sellTicket(20,1);

else if(Thread.currentThread()==sun) seller.sellTicket(10,1);

else if(Thread.currentThread()==li) seller.sellTicket(10,2);

else if(Thread.currentThread()==zhou) seller.sellTicket(5,1); } }

public class SaleExample{

public static void main(String args[]){ Cinema cinema=new Cinema(); cinema.zhao.start(); try{Thread.sleep(1000);}

catch(InterruptedException e){} cinema.qian.start(); try{Thread.sleep(1000);}

catch(InterruptedException e){} cinema.sun.start();

try{Thread.sleep(1000);}

catch(InterruptedException e){} cinema.li.start();

try{Thread.sleep(1000);}

catch(InterruptedException e){} cinema.zhou.start(); } }

五、结果分析与总结

3

4

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务