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

2019-05-17 16:13

生线程产生时间一到立即产生学生线程,等待时间T到,结束所有未结束的学生和老师线程,退出程序。

流程图如下:

static int busy[];//0表示闲1表示忙 static int count[];//老师已经检查的个数 static int Tnum;//教室中空闲老师的个数 static int S=1,M=2,K=1,N=2,D=1,T=2,p; static long start; static Object oo=new Object();//用于锁 static int r[]; public static int gettime(); public static synchronized voidcomein(); public static synchronized void leave();

2、老师线程

在教师线程中,老师进入和离开教室时利用修饰符synchronized来解决同步与互斥的问题;在进入的函数声明为: public static synchronized void comein(),离开的函数声明为 public static synchronized void comein(),在synchronized的修饰下,每次只能有一个线程调用comein和leave函数,且这两个函数是在主类中声明的,故老师与老师,学生与学生,老师与同学都不会同时进入或离开。

教师线程中,老师先进来并告知用户老师已经进入,刚开始时,进来一个

教师,教室中的空闲教师就增加一个,老师进来后,程序先判断该教室检查的学生数够N没,时间已经不够了。若两者有一个满足则老师要离开教室并告知用户,教室中空闲的教室少一个,且要把改离开的教室的状态设为忙,因为学生并不知道老师的编号,通过随机数找老师时,仍可能找到该老师,故只能通过设“忙”使该老师不可用才行。告知用户老师离开时,通过对比老师离开的原因,输出不同的信息;

如果不满足条件,则通过while语句让老师处在等待之中;等待学生请老师来检查; 流程图如下:

2、学生进程

在学生线程中,进入之前先判断现在进去时间够不够检查,如果不够,学生则不进入,离开,输出离开信息。如果够,学生。进入,并向用户打印进入信息。

学生进入后就开始看有没有K个空闲的老师,且时间够不够,如果时间够,但老师不足,则通过while语句一直等待;如果等待中时间不够了(不管空闲老师足够了没有),则直接离开,输出离开信息;如果在有效时间内等到了K个老师则开始选择老师;

一个学生选择老师时,不允许他人选择,且一开始就将空闲教师数减K,老师编号是通过随机数产生的,随机产生一个老师,看他忙不忙,如果忙则再随机找,如果不忙,则将老师编号存起来,将老师的状态改为忙;找到K个空闲老师后,通过sleep函数来表示检查D这么长的时间。

检查完毕后,输出检查完毕信息,学生释放老师,将选择的老师的状态改为空闲,老师空闲数加依次增加,每个老师的检查次数增加1,(此时判断时间够不够,老师是否已近检查了N个人,如果不够或已经检查够N个人,则让老师离开,状态改为忙空闲老师相应减少。若不是,则继续等待;)学生离开,输出离开信息;

流程图:

四、详细设计

源程序代码如下:

/*

* To change this template, choose Tools | Templates * and open the template in the editor. */

package 教师对学生项目评分;

import java.util.*;

import java.util.Scanner;

public class job {

static int busy[]; //老师忙,0表示闲,1表示忙

static int count[]; //老师已经检查的个数 static int Tnum; //教室中空闲老师的个数 static int S=1,M=2,K=1,N=2,D,T,p; static long start;

static int r[];

public static int gettime() {

double duration;

long finish=System.currentTimeMillis(); duration=(double)(finish-start); return (int)duration; }

public static void main(String args[]) {

do {

if(S*K>M*N||S<0||K<0||M<0||N<0)

System.out.println(\ System.out.println(\请输入学生个数S:\ Scanner input = new Scanner(System.in); S = input.nextInt();

System.out.println(\请输入老师个数M:\ M = input.nextInt();

System.out.println(\请输入检查每个项目需要的老师数K:\ K= input.nextInt();

System.out.println(\请输入每个老师可以检查的项目数N:\


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

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

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

马上注册会员

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