Java实现短作业优先算法,PCB里需要有进程名,进程状态,运行时间和到达时间,以及用链表去实现
时间: 2024-03-17 09:41:54 浏览: 59
短作业优先算法
以下是Java实现短作业优先算法,使用链表实现PCB的示例代码:
```java
import java.util.*;
class Process {
String name; // 进程名
int status; // 进程状态
int runtime; // 运行时间
int arrivalTime; // 到达时间
public Process(String name, int status, int runtime, int arrivalTime) {
this.name = name;
this.status = status;
this.runtime = runtime;
this.arrivalTime = arrivalTime;
}
}
public class ShortestJobFirst {
public static void main(String[] args) {
List<Process> processes = new LinkedList<>();
processes.add(new Process("P1", 0, 6, 0));
processes.add(new Process("P2", 0, 8, 1));
processes.add(new Process("P3", 0, 7, 2));
processes.add(new Process("P4", 0, 3, 3));
processes.add(new Process("P5", 0, 4, 4));
// 按到达时间排序
processes.sort(Comparator.comparingInt(p -> p.arrivalTime));
int currentTime = 0;
while (!processes.isEmpty()) {
// 找到运行时间最短的进程
Process shortestProcess = null;
for (Process process : processes) {
if (process.status == 0 && (shortestProcess == null || process.runtime < shortestProcess.runtime)) {
shortestProcess = process;
}
}
// 如果没有可运行的进程,则等待下一个进程到达
if (shortestProcess == null) {
currentTime++;
continue;
}
// 运行该进程
shortestProcess.status = 1;
currentTime += shortestProcess.runtime;
// 输出结果
System.out.println(shortestProcess.name + " " + shortestProcess.status + " " + currentTime);
// 从进程列表中移除已完成的进程
processes.remove(shortestProcess);
}
}
}
```
这个示例代码与之前的示例代码基本相同,只是将List改为了LinkedList,实现了链表的功能。链表的优点是在插入、删除等操作时更加高效,但在查询时性能较差。因此,在实现短作业优先算法时,链表可以更好地处理插入和删除操作,但查询操作的性能可能会受到影响。
阅读全文