Java实现短作业优先算法,PCB里需要有进程名,进程状态,运行时间和到达时间
时间: 2024-03-13 19:47:24 浏览: 68
好的,这里是 Java 实现短作业优先算法的示例代码:
```java
import java.util.*;
public class SJF {
// 定义进程类
static class Process {
String name; // 进程名
int status; // 进程状态,0 表示未到达,1 表示就绪,2 表示运行,3 表示完成
int arriveTime; // 到达时间
int runTime; // 运行时间
public Process(String name, int status, int arriveTime, int runTime) {
this.name = name;
this.status = status;
this.arriveTime = arriveTime;
this.runTime = runTime;
}
}
public static void main(String[] args) {
// 初始化进程列表
List<Process> processes = new ArrayList<>();
processes.add(new Process("P1", 0, 0, 3));
processes.add(new Process("P2", 0, 2, 6));
processes.add(new Process("P3", 0, 4, 4));
processes.add(new Process("P4", 0, 6, 2));
processes.add(new Process("P5", 0, 8, 5));
int currentTime = 0; // 当前时间
int finishedCount = 0; // 已完成的进程数
while (finishedCount < processes.size()) {
// 选择最短作业的进程
Process shortestProcess = null;
for (Process process : processes) {
if (process.status == 0 && process.arriveTime <= currentTime) {
if (shortestProcess == null || process.runTime < shortestProcess.runTime) {
shortestProcess = process;
}
}
}
if (shortestProcess != null) {
// 运行进程
shortestProcess.status = 2;
shortestProcess.runTime--;
System.out.println("时间 " + currentTime + " 运行进程 " + shortestProcess.name + ",剩余时间 " + shortestProcess.runTime);
if (shortestProcess.runTime == 0) {
// 完成进程
shortestProcess.status = 3;
finishedCount++;
System.out.println("时间 " + (currentTime + 1) + " 完成进程 " + shortestProcess.name);
}
}
currentTime++;
}
System.out.println("所有进程完成,总耗时 " + currentTime);
}
}
```
在这个示例代码中,我们定义了一个 `Process` 类来表示进程,包含进程名、状态、到达时间和运行时间。在主函数中,我们初始化了一组进程,并按照短作业优先算法的规则,选择最短作业的进程进行运行。当一个进程运行完成后,我们将其状态设置为已完成,并统计已完成的进程数。最终输出完成所有进程的总耗时。
阅读全文