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

//进程数据成员

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;
}
}
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值