资源简介

用java编写的一个调度算法,是计算机操作系统里的一个算法的演示程序 附源代码和设计报告

资源截图

代码片段和文件信息

package math;
//主函数及算法

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.Vector;

import view.View;

/**
 * 多级反馈队列算法
 * @author 谌毅
 *
 */
public class Arithmetic {
private static SeqQueue[] sq=new SeqQueue[4];
private static View view=null;
private int num=1time=-1doflag=0threadNum=0;
private static int maxthreadnum=5;
//time为暂停计时用||doflag标示出当前正在执行的队列
private boolean addThreadFlag=false;//addThreadFlag判断添加进程是否还在执行false为在运行true为停止
private boolean delThreadFlag=false;//delThreadFlag判断添加进程是否还在执行false为在运行true为停止
private boolean newflag=true;//newflag标示在执行过程中是否有比自己优先级高的进程加入队列true为没有false为有
private boolean isStop=false;//表示是否结束执行进程
private Work work=null;//保存每次从队列取出的进程
private SimpleDateFormat sdf=new SimpleDateFormat(“hh:mm:ss“);//定义时间显示格式
private Thread addthread=nulldelthread=null;//定义两个线程


public Arithmetic() {
for(int i=0;i<4;i++){
sq[i]=new SeqQueue(5(int)Math.scalb(1 i+1));//构建队列
}
view=new View(sq);//实例化面板
// maxthreadnum=view.getThreadNum();
// while(maxthreadnum>10||maxthreadnum==0){
// maxthreadnum=view.getThreadNum();
// }
addthread=new addThread();
delthread=new delThread();
addthread.start();
delthread.start();
}

/**
 * 用于启动添加进程
 * @author 谌毅
 */
public void startAddThread(){
addthread=new addThread();
threadNum=0;
addThreadFlag=false;
addthread.start();//启动添加进程
}

/**
 * 用于启动执行进程
 * @author 谌毅
 */
public void startDelThread(){
delthread=new delThread();
isStop=false;
delThreadFlag=false;
delthread.start();//启动执行进程
}

/**
 * 用于停止添加进程
 * @author 谌毅
 */
@SuppressWarnings(“deprecation“)
public void stopAddThread(){
addThreadFlag=true;
addthread.stop();
addthread=null;
}

/**
 * 用于停止执行进程
 * @author 谌毅
 */
public void stopDelThread(){
isStop=true;
}



/**
 * 自动添加进程的方法
 * @author 谌毅
 *
 */
class addThread extends Thread{//添加进程
@SuppressWarnings(“deprecation“)
public void run() {
while(true){
try{
threadNum++;
Thread.sleep(new Random().nextInt(5000));
int time=0;
while(time==0){
time=new Random().nextInt(20);//随机生成进程要完成的时间
}
num++;
Work work=new Work(“进程“+(num-1)time);//生成一个进程
int flag=addInSeqQueue(0 work);//把进程放入队列
if(flag newflag=false;//表示有优先级更高的进程进入队列
}
View.setSq(sq);//更新面板数据
view.showWork();
view.addMes(“‘进程“+(num-1)+“‘于“+new SimpleDateFormat(“hh:mm:ss“).format(work.getInDate())+“进入“+(flag+1)+“号队列
“);

if(threadNum>=maxthreadnum){//设置添加多少个进程
addThreadFlag=true;
this.stop();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}

/**
 * 手动添加进程
 * @param work:进程对象
 */
public void addThreadByHand(Work work){
int flag=addInSeqQueue(0 work);//把进程放入队列
if(flag

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     647168  2009-10-07 21:22  操作系统原理课程设计报告.doc

     文件       8337  2009-06-30 14:26  src\math\Arithmetic.java

     文件       2867  2009-06-30 14:18  src\math\SeqQueue.java

     文件       1238  2009-04-25 12:06  src\math\Work.java

     文件       8068  2009-07-02 14:36  src\view\ControlView.java

     文件      12431  2009-07-03 13:22  src\view\View.java

     文件    1937032  2009-07-03 12:32  多级反馈队列调度算法.exe

     目录          0  2009-10-07 21:19  src\math

     目录          0  2009-10-07 21:19  src\view

     目录          0  2009-10-07 21:19  src

----------- ---------  ---------- -----  ----

              2617141                    10


评论

共有 条评论