专业课程设计I报告 - B09040208(3)

2019-05-17 16:13

N = input.nextInt();

System.out.println(\请输入总时间T:\ T = input.nextInt();

System.out.println(\请输入检查每个项目所需时间D:\ D = input.nextInt();

}while(S*K>M*N||S<0||K<0||M<0||N<0);

busy= new int[M]; count= new int[M]; Tnum= 0; r=new int[S];

for(int i=0;i

busy[i]=0; count[i]=0; }

Teacher tea[]= new Teacher[M]; for(int k=0;k

tea[k]=new Teacher(k); }

Student stu[]=new Student[S]; for(int k=0;k

stu[k]=new Student(k); }

System.out.println(\ for(int i=0;i

count[i]=0; busy[i]=0; }

start=System.currentTimeMillis(); for(int i=0;i

tea[i].start(); }

for(int i=0;i

while(gettime()<=T); } }

class Teacher extends Thread {

int I;//第几个老师 public Teacher(int i){ I=i; }

public synchronized void comein() {

job.Tnum++; //教室中空闲老师人数加1 System.out.println(job.gettime()+\老师进入教室\ }

public synchronized void leave() {

job.Tnum--; this.stop(); }

public void run() {

this.comein();

while(job.count[I]

{

this.leave();

System.out.println(job.gettime()+\老师离开教室(已经检查够N个)\ else

{ if(job.busy[I]==0) {

System.out.println(job.gettime()+\老师离开教室(剩下时间不足以检查一个项目))\

this.leave();

} //老师由于时间不够再查一个人,所以离开

} } } }

class Student extends Thread {

int I; int a=0;

int visit[]=new int[job.K]; public Student(int i) {I=i;}

public synchronized void comein()

{ System.out.println(job.gettime()+\ \学生进入教室\ public synchronized void leave()

{ System.out.println(job.gettime()+\ \学生离开教室\ this.stop(); }

public void run() {

if(job.gettime()>job.T-job.D) //剩余时间是否小于D //是,则学生离开 {

System.out.println(job.gettime()+\ \学生离开教室(时间不足)\ this.stop(); //结束学生线程 } else { this.comein();//不是,学生进入教室 //System.out.println(Work.gettime()+\ }

while(job.Tnum

if(job.gettime()>=job.T-job.D) //等老师够,可是等;老师够的时候时间不够了

{

System.out.println(job.gettime()+\学生离开教室(时间不够)\ this.stop(); } else

synchronized(this){ {

job.Tnum = job.Tnum - job.K; for(int j=0;j=job.N || job.busy[a]!=0) //test[a]>=N表明老师已完成任务,已离开 a=(int)((double)Math.random()*job.M); //busy[a]!=0表明老师正在忙,为别人检查,继续寻找 job.busy[a]=1; //找到老师,修改其忙闲状态 visit[j]=a; //保存老师序号

System.out.println(job.gettime()+\老师\检查\学生\ }} try{Thread.sleep(job.D);}

catch(InterruptedException e) {}//检查学生 for(int j=0;j

if(job.gettime()>job.T-job.D)//如果时间已经不够了,立即让老师离开(即让他们不可用)//离开不能同时 {

System.out.println(job.gettime()+\老师\离开教室(时间不够).\

job.busy[visit[j]]=1; } } }

this.leave(); }

}

五、测试数据及其结果分析

输入数据:S=3.M=3,K=2,N=3,T=1000,D=200

系统为S=3个学生生成三个随机进入教室的时间:

单位是毫秒。

运行结果:

六、调试过程中的问题

1、程序中学生进入教室的时间是通过随机函数产生随机的,但是由于学生线程是依次产生的,如果先开始的学生线程的随机时间比较迟,后开始的学生线程的随机时间比较早,那么会导致先开始的学生线程没有开始时,把后面的学生线程都堵塞了。所以在这里通过对产生的随机时间从小到大排列,这样就可以避免这种问题。


专业课程设计I报告 - B09040208(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:钻机装置及器具项目IPO上市咨询(2013年最新细分市场+募投可研+招

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: