- 首先新建PCB类;
- 其次对进程的到达时间、服务时间进行排序;
- 最后创建进程,开始模拟进程调度;
package work;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.Arrays;
class PCB{
private int priority = 0;
private String id;
private int arriveTime;
private int runTime;
public PCB(String id,int arriveTime,int runTime) {
this.id = id;
this.arriveTime = arriveTime;
this.runTime = runTime;
}
public void run(int time) {
runTime -= time;
}
public String getId() {
return this.id;
}
public int getArriveTime(){
return this.arriveTime;
}
public int getRunTime() {
return this.runTime;
}
}
public class OStestdemo {
public static void main(String[] args) throws InterruptedException {
int[] timelices = {1,2,4};
List <Queue<PCB>> PriorityQueue = new LinkedList<Queue<PCB>>();
for(int i = 0;i < timelices.length;i++) {
Queue<PCB> temp = new LinkedBlockingQueue<PCB>();
PriorityQueue.add(temp);
}
int[][] Time = {{0,8},{1,4},{0,1}};
Queue<PCB> proce = new LinkedBlockingQueue<PCB>();
System.out.println(Time.length);
for (int i = 0;i<Time.length;i++){
for (int j=i+1 ;j<Time.length;j++){
if(Time[i][0]>Time[j][0]){
int tim=Time[i][0];
int test=Time[i][1];
Time[i][0]=Time[j][0];
Time[i][1]=Time[j][1];
Time[j][0]=tim;
Time[j][1]=test;
}
else if (Time[i][0]==Time[j][0]){
if(Time[i][1]>Time[j][1]){
int tim=Time[i][0];
int test=Time[i][1];
Time[i][0]=Time[j][0];
Time[i][1]=Time[j][1];
Time[j][0]=tim;
Time[j][1]=test;
}
}
}
}
for(int i = 0;i<Time.length;i++){
System.out.println("[][0]"+Time[i][0]+"[][1]"+Time[i][1]);
proce.add(new PCB("P"+i,Time[i][0],Time[i][1]));
}
int clock=0;
while(true) {
if(!proce.isEmpty()) {
if(proce.element().getArriveTime() <= clock) {
PCB temp =proce.remove();
PriorityQueue.get(0).add(temp);
System.out.println(temp.getId()+" 到了"+"此时的时刻为: "+clock);
}
}
for(int i=0;i < PriorityQueue.size();i++) {
if(!PriorityQueue.get(i).isEmpty()) {
PCB runPro = PriorityQueue.get(i).remove();
System.out.println(runPro.getId()+" 正在执行"+"此时的时刻为: "+clock);
if(runPro.getRunTime() > timelices[i]) {
runPro.run(timelices[i]);
clock += timelices[i];
if(i != PriorityQueue.size()-1) {
PriorityQueue.get(i+1).add(runPro);
}else {
PriorityQueue.get(i).add(runPro);
}
Thread.sleep(1000);
}else {
clock += runPro.getRunTime();
runPro.run(runPro.getRunTime());
System.out.println(runPro.getId()+" 执行完毕"+"此时的时刻为: "+clock);
}
break;
}
}
}
}
}
运行结果: