模拟进程调度(简单实现)

来源:互联网 发布:什么是爱 知乎 编辑:程序博客网 时间:2024/05/16 01:15

//进程数据成员

public class Process {

public String Name;

public String Link;

public int Time;

public int Priority;

public String State;

public Process(String Name,String Link,int Time,int Priority,String State){

this.Name = Name;//进程名称

this.Link = Link;//下一个指针

this.Time = Time;//要求运行时间

this.Priority = Priority;//优先级

this.State = State;//进程状态

}

}

//Collections.sort();的参数(灰常重要)

import java.util.*;
public class Mycomparator implements Comparator{

public int compare(Object arg0, Object arg1) {
Process p1=(Process)arg0;
Process p2=(Process)arg1;
if(p1.Priority!=p2.Priority&&(p1.Time!=0&&p2.Time!=0)){//当运行时间不为0时
if(p1.Priority<p2.Priority)
return 1;
else{
return 0;
}
}
else{
if(p1.Time<p2.Time)//优先级相同,比较运行时间
return 1;
else
return 0;
}
}
}
//main函数
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Test {
@SuppressWarnings("unchecked")
public static void main(String args[]){
Process K1 = new Process("p1","0",2,1,"READY");
Process K2 = new Process("p2","K4",3,5,"READY");
Process K3 = new Process("p3","K5",1,3,"READY");
Process K4 = new Process("p4","K3",2,4,"READY");
Process K5 = new Process("p5","K1",4,2,"READY");
Process[] Prolist = {K1,K2,K3,K4,K5}; 
ArrayList<Process> list = new ArrayList<Process>(5);
int index = 0;
for(int i=0; i<Prolist.length; i++){
list.add(Prolist[i]);
}
Comparator<Process> comp = new Mycomparator();//根据优先级以及所需时间长短排序
System.out.println("进程名        "+"运行时间        "+"优先级        "+"状态        ");
while(true){
Collections.sort(list, comp);
Process pro = list.get(0);
if(pro.Time==0){
Collections.sort(list,comp);
}
else{
pro.State = "RUN";
if(pro.Priority!=0&&pro.Time!=0){
pro.Priority--;
}else{
}
pro.Time--;
if (pro.Time == 0) {
pro.State = "FINISH";
}
System.out.println(pro.Name + "        " + pro.Time
+ "        " + pro.Priority + "        " + pro.State);
if (pro.State.equals("FINISH"))
index++;
if(index == list.size())
break;
}
}
}
}

原创粉丝点击